diff --git a/.github/workflows/deploy-visualization.yml b/.github/workflows/deploy-visualization.yml new file mode 100644 index 0000000..96fda02 --- /dev/null +++ b/.github/workflows/deploy-visualization.yml @@ -0,0 +1,51 @@ +name: deploy-visualization + +on: + push: + branches: + - main # Set a branch to deploy + +# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages +permissions: + contents: read + pages: write + id-token: write + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: checkout + uses: actions/checkout@v3 + with: + fetch-depth: 0 # Fetch all history for .GitInfo and .Lastmod + + - name: Setup Pages + id: pages + uses: actions/configure-pages@v3 + + - name: Setup Java + uses: actions/setup-java@v3 + with: + distribution: 'zulu' # See 'Supported distributions' for available options + java-version: '11' + + - name: Build Visualization + run: make build + + - name: Upload artifact + uses: actions/upload-pages-artifact@v1 + with: + path: ./webvowl + + # Deployment job + deploy: + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-latest + needs: build + steps: + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v2 \ No newline at end of file diff --git a/.gitignore b/.gitignore index 06432c5..e59d699 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1 @@ -/owl2vowl* -ontologies/ -webvowl/ \ No newline at end of file +ontologies/ \ No newline at end of file diff --git a/makefile b/makefile new file mode 100644 index 0000000..138454a --- /dev/null +++ b/makefile @@ -0,0 +1,21 @@ +# Makefile +# Generates VOWL file for visualization in WebVOWL + +SHELL := /bin/bash +.PHONY: vowl clean + +# paths +ONTO = ./display-ontology.ttl +VOWL = ./webvowl/data/display.json + +vowl: + @echo "Generate VOWL" + java -jar ./owl2vowl/owl2vowl.jar \ + -file $(ONTO) \ + -output $(VOWL) + @echo "DONE" + +clean: + @echo "foobar" + +build: vowl \ No newline at end of file diff --git a/owl2vowl/owl2vowl.jar b/owl2vowl/owl2vowl.jar new file mode 100644 index 0000000..30f1dac Binary files /dev/null and b/owl2vowl/owl2vowl.jar differ diff --git a/webvowl/css/webvowl.app.css b/webvowl/css/webvowl.app.css new file mode 100644 index 0000000..45526ce --- /dev/null +++ b/webvowl/css/webvowl.app.css @@ -0,0 +1,2477 @@ +@import url(http://fonts.googleapis.com/css?family=Open+Sans);/*---------------------------------------------- + WebVOWL page +----------------------------------------------*/ +html { + -ms-content-zooming: none; +} + + + +#loading-progress { + width: 50%; + margin: 10px 0; +} + +#drag_dropOverlay{ + width: 100%; + height:100%; + position:absolute; + top:0; + opacity: 0.5; + background-color: #3071a9; + pointer-events: none; + +} + +#dragDropContainer{ + width: 100%; + height:100%; + position:absolute; + top:0; + pointer-events: none; +} +#drag_icon_group{ + + +} + +#drag_msg{ + width: 50%; + background-color: #fefefe; + height: 50%; + border: black 2px solid; + border-radius: 20px; + left: 25%; + position: absolute; + top: 25%; + vertical-align: middle; + line-height: 10px; + text-align: center; + pointer-events: none; + padding: 10px; + font-size: 1.5em; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + + +#layoutLoadingProgressBarContainer { + height: 50px; + text-align: left; + line-height: 1.5; +} + +#FPS_Statistics { + /*position : absolute;*/ + /*top : 10px;*/ + /*right: 50px;*/ + padding-left: 60px; + padding-top: 60px; +} + +#reloadCachedOntology { + /*position : absolute;*/ + /*top : 10px;*/ + /*right: 50px;*/ +} + +#additionalInformationContainer { + position: absolute; + top: 10px; + right: 50px; +} + +#modeOfOperationString { + /*position: absolute;*/ + /*right: 50px;*/ + /*top : 60px;*/ + padding-left: 34px; +} + +#direct-text-input { + border: 1px solid #34495e; + width: 100%; + margin-top: 5px; + cursor: pointer; +} + +#directUploadBtn, #close_directUploadBtn { + border: 1px solid #34495e; + width: 100%; + margin-top: 5px; + cursor: pointer +} + +#di_controls { + +} + +#di_controls > ul { + list-style: none; + margin: 0; + padding: 5px 0 0 5px; + +} + +#progressBarContext { + border-radius: 10px; + background-color: #bdc3c7; + height: 25px; + border: solid 1px black; + + margin: auto; + +} + +#progressBarValue { + border-radius: 9px; + width: 0%; + background-color: #2980b9; + height: 25px; + line-height: 1.5; + text-align: center; +} + +/** adding searching Styles **/ +.dbEntry { + background-color: #ffffff; + color: #2980b9; + padding: 10px; + font-size: 14px; + border: none; + cursor: pointer; +} + +.debugOption { + +} + +.dbEntrySelected { + background-color: #bdc3c7; + color: #2980b9; + padding: 10px; + font-size: 14px; + border: none; + cursor: pointer; +} + +.dbEntry:hover, .dbEntry:focus { + background-color: #bdc3c7; +} + +.searchMenuEntry { + background-color: #ffffff; + bottom: 0; + font-size: 14px; + min-width: 50px; + margin: 0; + padding: 0; + z-index: 99; + border-radius: 4px 4px 0 0; + border: 1px solid rgba(0, 0, 0, 0.15); + -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); + box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); + box-sizing: border-box; + border-bottom: none; + display: none; + position: absolute; + list-style: none; +} + +.searchInputText { + background-color: #ffffff; + color: black; + border: black; + text-decoration: none; + max-width: 150px; + overflow: hidden; + text-overflow: ellipsis; + /*height: 20px;*/ + margin: 0; +} + +img, iframe { + border: none; +} + +.hidden { + display: none !important; +} + +.clear { + clear: both; +} + +a { + color: #69c; + text-decoration: none; +} + +a:hover { + color: #3498db; +} + +#optionsArea a { + color: #2980b9; +} + +#optionsArea a.highlighted { + background-color: #d90; +} + +.toolTipMenu li.highlighted { + background-color: #feb; +} + +#browserCheck { + /* checking for IE where WebVOWL is not working */ + background-color: #f00; + padding: 5px 0; + position: absolute; + text-align: center; + width: 100%; +} + +#browserCheck a { + color: #fff; +} + +#browserCheck a:hover { + text-decoration: underline; +} + +/*---------------------------------------------- + SideBar Animation Class; +----------------------------------------------- */ +@-webkit-keyframes sbExpandAnimation { + 0% { + width: 78%; + } + 100% { + width: 100%; + } +} + +@-moz-keyframes sbExpandAnimation { + 0% { + width: 78%; + } + 100% { + width: 100%; + } +} + +@-o-keyframes sbExpandAnimation { + 0% { + width: 78%; + } + 100% { + width: 100%; + } +} + +@keyframes sbExpandAnimation { + 0% { + width: 78%; + } + 100% { + width: 100%; + } +} + +/*Collapse Animation*/ +@-webkit-keyframes sbCollapseAnimation { + 0% { + width: 100%; + } + 100% { + width: 78%; + } +} + +@-moz-keyframes sbCollapseAnimation { + 0% { + width: 100%; + } + 100% { + width: 78%; + } +} + +@-o-keyframes sbCollapseAnimation { + 0% { + width: 100%; + } + 100% { + width: 78%; + } +} + +@keyframes sbCollapseAnimation { + 0% { + width: 100%; + } + 100% { + width: 78%; + } +} + +/*---------------------------------------------- + SideBar Animation Class; +----------------------------------------------- */ +@-webkit-keyframes l_sbExpandAnimation { + 0% { + width: 0px; + } + 100% { + width: 200px; + } +} + +@-moz-keyframes l_sbExpandAnimation { + 0% { + width: 0px; + } + 100% { + width: 200px; + } +} + +@-o-keyframes l_sbExpandAnimation { + 0% { + width: 0px; + } + 100% { + width: 200px; + } +} + +@keyframes l_sbExpandAnimation { + 0% { + width: 0px; + } + 100% { + width: 200px; + } +} + +/*Collapse Animation*/ +@-webkit-keyframes l_sbCollapseAnimation { + 0% { + width: 200px; + } + 100% { + width: 0px; + } +} + +@-moz-keyframes l_sbCollapseAnimation { + 0% { + width: 200px; + } + 100% { + width: 0px; + } +} + +@-o-keyframes l_sbCollapseAnimation { + 0% { + width: 200px; + } + 100% { + width: 0px; + } +} + +@keyframes l_sbCollapseAnimation { + 0% { + width: 200px; + } + 100% { + width: 0px; + } +} + +/*----------------- WARNING ANIMATIONS-------------*/ + +/*---------------------------------------------- + SideBar Animation Class; +----------------------------------------------- */ +@-webkit-keyframes warn_ExpandAnimation { + 0% { + top: -500px; + } + 100% { + top: 0; + } +} + +@-moz-keyframes warn_ExpandAnimation { + 0% { + top: -500px; + } + 100% { + top: 0; + } +} + +@-o-keyframes warn_ExpandAnimation { + 0% { + top: -500px; + } + 100% { + top: 0; + } +} + +@keyframes warn_ExpandAnimation { + 0% { + top: -500px; + } + 100% { + top: 0; + } +} + +/*Collapse Animation*/ +@-webkit-keyframes warn_CollapseAnimation { + 0% { + top: 0; + } + 100% { + top: -400px; + } +} + +@-moz-keyframes warn_CollapseAnimation { + 0% { + top: 0; + } + 100% { + top: -400px; + } +} + +@-o-keyframes warn_CollapseAnimation { + 0% { + top: 0; + } + 100% { + top: -400px; + } +} + +@keyframes warn_CollapseAnimation { + 0% { + top: 0; + } + 100% { + top: -400px; + } +} + +@keyframes msg_CollapseAnimation { + 0% { + top: 0; + } + 100% { + top: -400px; + } +} + +/*// add expand and collaps width for the warn module*/ +@-webkit-keyframes warn_ExpandLeftBarAnimation { + 0% { + left: 0; + } + 100% { + left: 100px; + } +} + +@-moz-keyframes warn_ExpandLeftBarAnimation { + 0% { + left: 0; + } + 100% { + left: 100px; + } +} + +@-o-keyframes warn_ExpandLeftBarAnimation { + 0% { + left: 0; + } + 100% { + left: 100px; + } +} + +@keyframes warn_ExpandLeftBarAnimation { + 0% { + left: 0; + } + 100% { + left: 100px; + } +} + +/*Collapse Animation*/ +@-webkit-keyframes warn_CollapseLeftBarAnimation { + 0% { + left: 100px; + } + 100% { + left: 0; + } +} + +@-moz-keyframes warn_CollapseLeftBarAnimation { + 0% { + left: 100px; + } + 100% { + left: 0; + } +} + +@-o-keyframes warn_CollapseLeftBarAnimation { + 0% { + left: 100px; + } + 100% { + left: 0; + } +} + +@keyframes warn_CollapseLeftBarAnimation { + 0% { + left: 100px; + } + 100% { + left: 0; + } +} + +/*// same for the right side expansion*/ + +/*// add expand and collaps width for the warn module*/ +@-webkit-keyframes warn_ExpandRightBarAnimation { + 0% { + width: 100%; + } + 100% { + width: 78%; + } +} + +@-moz-keyframes warn_ExpandRightBarAnimation { + 0% { + width: 100%; + } + 100% { + width: 78%; + } +} + +@-o-keyframes warn_ExpandRightBarAnimation { + 0% { + width: 100%; + } + 100% { + width: 78%; + } +} + +@keyframes warn_ExpandRightBarAnimation { + 0% { + width: 100%; + } + 100% { + width: 78%; + } + +} + +/*Collapse Animation*/ +@-webkit-keyframes warn_CollapseRightBarAnimation { + 0% { + width: 78%; + } + 100% { + width: 100%; + } +} + +@-moz-keyframes warn_CollapseRightBarAnimation { + 0% { + width: 78%; + } + 100% { + width: 100%; + } +} + +@-o-keyframes warn_CollapseRightBarAnimation { + 0% { + width: 78%; + } + 100% { + width: 100%; + } +} + +@keyframes warn_CollapseRightBarAnimation { + 0% { + width: 78%; + } + 100% { + width: 100%; + } +} + +/*---------------------------------------------- + LAYOUT +----------------------------------------------*/ +body { + background: rgb(24, 32, 42); + height: 100%; + font-size: 14px; + font-family: 'Open Sans', Helvetica, Arial, sans-serif; + line-height: 1; + margin: 0; + overflow: hidden; + padding: 0; + position: fixed; + width: 100%; +} + +main { + height: 100%; + margin: 0; + padding: 0; + position: relative; + width: 100%; +} + +#canvasArea { + position: relative; + margin: 0; + padding: 0; + width: 78%; +} + +#canvasArea #graph { + box-sizing: border-box; + margin: 0 0 2px 0; + background-color: #ecf0f1; + overflow: hidden; + padding: 0; + width: 100%; +} + +#canvasArea svg { + box-sizing: border-box; + margin: 0; + overflow: hidden; + padding: 0; +} + +#logo { + position: fixed; + /*padding: 10px;*/ + pointer-events: none; + /*border: solid 1px red;*/ +} + +#logo h2 { + color: #3498db; + margin: 0; + line-height: 0.7; + text-align: center; + font-size: 24px; +} + +#logo h2 span { + color: #34495E; + /*font-size: min(2vmin, 24px);*/ + font-size: 16px; +} + +@media screen and (max-device-height: 800px) { + #logo h2 { + font-size: calc(8px + 1.0vmin); + } + + #logo h2 span { + font-size: calc(3px + 1.0vmin); + } +} + +@media screen and (max-height: 800px) { + #logo h2 { + font-size: calc(8px + 1.0vmin); + } + + #logo h2 span { + font-size: calc(3px + 1.0vmin); + } +} + +@media screen and (max-device-width: 1200px) { + #logo h2 { + font-size: calc(8px + 1.0vmin); + } + + #logo h2 span { + font-size: calc(3px + 1.0vmin); + } +} + +@media screen and (max-width: 1200px) { + #logo h2 { + font-size: calc(8px + 1.0vmin); + } + + #logo h2 span { + font-size: calc(3px + 1.0vmin); + } +} + +.checkboxContainer input, .checkboxContainer label { + vertical-align: middle; +} + +.selected-ontology { + background-color: #eee; +} + +#credits { + border-top: solid 1px #bdc3c7; + font-size: 0.9em; +} + +.slideOption { + position: relative; + padding: 8px 5px; + outline: none; +} + +.slideOption .value { + float: right; + outline: none; +} + +.slideOption input[type="range"] { + box-sizing: border-box; + margin: 0; + outline: none; + -webkit-appearance: none; + -moz-appearance: none; + border-radius: 3px; + height: 12px; + width: 100%; + box-shadow: none; + left: 0; + position: relative; + transition: all 0.5s ease; + background-color: #eee; +} + +/*TRACK*/ +.slideOption input[type=range]::-webkit-slider-runnable-track { + -webkit-appearance: none; + background-color: #3071a9; + height: 3px; +} + +.slideOption input[type=range]::-moz-range-track { + -webkit-appearance: none; + background-color: #3071a9; + height: 3px; +} + +.slideOption input[type="range"]:hover { + outline: none; +} + +/*THUMB*/ +.slideOption input[type="range"]::-webkit-slider-thumb { + -webkit-appearance: none; + background-color: white; + border-radius: 3px; + border: solid 1px black; + transition: all 0.5s ease; + height: 10px; + width: 30px; + outline: none; + margin-top: -3px; +} + +.slideOption input[type="range"]::-moz-range-thumb { + -webkit-appearance: none; + background-color: white; + border-radius: 3px; + border: solid 1px black; + transition: all 0.5s ease; + height: 10px; + width: 30px; + outline: none; +} + +.slideOption input[type="range"]::-moz-range-thumb:hover { + background-color: #d90; + outline: none; +} + +.slideOption input[type="range"]::-webkit-slider-thumb:hover { + background-color: #d90; + /*color: #d90;*/ + outline: none; +} + +/*focus : remove border*/ +.slideOption input[type="range"]:focus { + outline: none; +} + +.slideOption input[type="range"]:active { + outline: none; +} + +.slideOption input[type="range"]::-moz-range-thumb:focus { + outline: none; +} + +.slideOption input[type="range"]::-moz-range-thumb:active { + outline: none; +} + +.slideOption input[type="range"]::-webkit-slider-thumb:focus { + outline: none; +} + +.slideOption input[type="range"]::-webkit-slider-thumb:active { + outline: none; +} + +.slideOption input[type="range"]:disabled { + box-sizing: border-box; + margin: 0; + outline: none; + -webkit-appearance: none; + -moz-appearance: none; + border-radius: 3px; + height: 12px; + width: 100%; + box-shadow: none; + left: 0; + position: relative; + transition: all 0.5s ease; + background-color: #787878; +} + +/*TRACK*/ +.slideOption input[type=range]:disabled::-webkit-slider-runnable-track { + -webkit-appearance: none; + background-color: #373737; + height: 3px; +} + +.slideOption input[type=range]:disabled::-moz-range-track { + -webkit-appearance: none; + background-color: #373737; + height: 3px; +} + +.slideOption input[type="range"]:disabled { + outline: none; +} + +/*THUMB*/ +.slideOption input[type="range"]:disabled::-webkit-slider-thumb { + -webkit-appearance: none; + background-color: #363636; + border-radius: 3px; + border: solid 1px #aaaaaa; + transition: all 0.5s ease; + height: 10px; + width: 30px; + outline: none; + margin-top: -3px; +} + +.slideOption input[type="range"]:disabled::-moz-range-thumb { + -webkit-appearance: none; + background-color: #aaaaaa; + border-radius: 3px; + border: solid 1px black; + transition: all 0.5s ease; + height: 10px; + width: 30px; + outline: none; +} + +.slideOption input[type="range"]:disabled::-moz-range-thumb { + background-color: #aaaaaa; + outline: none; +} + +.slideOption input[type="range"]:disabled::-webkit-slider-thumb { + background-color: #aaaaaa; + /*color: #d90;*/ + outline: none; +} + +.slideOption input[type="range"]:disabled:hover::-moz-range-thumb { + background-color: #404040; + outline: none; +} + +.slideOption input[type="range"]:disabled:hover::-webkit-slider-thumb { + background-color: #404040; + /*color: #d90;*/ + outline: none; +} + +#detailsArea { + top: 0; + right: 0; + bottom: 0; + color: #bdc3c7; + height: 100%; + width: 22%; + overflow-y: auto; + overflow-x: hidden; + position: fixed; + border-left: 1px solid #34495E; +} + +#detailsArea h1 { + border-bottom: solid 1px #34495e; + color: #ecf0f1; + display: block; + font-weight: 100; + font-size: 1.5em; + margin: 0; + padding: 10px 0; + text-align: center; +} + +#generalDetails { + width: auto; + box-sizing: border-box; + height: 100%; +} + +#generalDetails span #about { + border-bottom: solid 1px #34495e; + display: block; + padding: 10px; + text-align: center; + word-wrap: break-word; + color: #69c; +} + +#generalDetails h4 { + background: rgb(27, 37, 46); + color: #ecf0f1; + display: block; + font-size: 1.1em; + font-weight: 100; + margin: 0; + padding: 10px 0; + text-align: center; +} + +#detailsArea #generalDetails h5 { + border-bottom: solid 1px #34495e; + font-size: 0.9em; + font-weight: 100; + margin: 0; + padding: 5px; + text-align: center; +} + +#description { + text-align: justify; +} + +.accordion-container p { + font-size: 0.9em; + line-height: 1.3; + margin: 5px 10px; +} + +.statisticDetails span { + font-weight: 100; + font-style: italic; + margin: 10px 0; + padding: 10px; +} + +.statisticDetails div { + font-weight: 100; + font-style: italic; + margin: 10px 0; + padding: 0 10px; + display: inline; +} + +#selection-details .propDetails a { + color: #69c; +} + +#selection-details .propDetails > span { + font-weight: 100; + font-style: italic; + padding: 0 10px; +} + +#selection-details #classEquivUri span, #selection-details #disjointNodes span { + padding: 0; +} + +#selection-details .propDetails div { + font-weight: 100; + font-style: italic; + margin: 10px 0; + padding: 0 10px; + display: inline; +} + +#selection-details .propDetails div span { + padding: 0; +} + +/* give subclass property the same background color as the canvas */ +.subclass { + fill: #ecf0f1; +} + +.accordion-trigger { + background: #24323e; + cursor: pointer; + padding: .5em; +} + +.accordion-trigger.accordion-trigger-active:before { + padding-right: 4px; + content: "\25BC" +} + +.accordion-trigger:not(.accordion-trigger-active):before { + padding-right: 4px; + content: "\25BA" +} + +.accordion-container.scrollable { + max-height: 40%; + overflow: auto; +} + +.small-whitespace-separator { + height: 3px; +} + +#language { + background: transparent; + border: 1px solid #34495E; + color: #ecf0f1; +} + +#language option { + background-color: #24323e; +} + +.converter-form:not(:first-child) { + margin-top: 5px; +} + +.converter-form label { + display: inline-block; + line-height: normal; +} + +.converter-form input { + box-sizing: border-box; + height: 20px; + width: 74%; + border: 1px solid #34495E; +} + +.converter-form button { + cursor: pointer; + float: right; + height: 20px; + padding: 0; + width: 25%; + border: 1px solid #34495E; + background-color: #ecf0f1; +} + +#file-converter-label { + border: 1px solid #34495E; + box-sizing: border-box; + cursor: pointer; + height: 20px; + width: 74%; +} + +#killWarning { + cursor: pointer; + color: #ffffff; + font-weight: bold; +} + +/*#copyBt{*/ +/*box-sizing: border-box;*/ +/*color: #000000;*/ +/*float:right;*/ +/*position:absolute;*/ +/*right:2px;*/ +/*padding: 2px 7px 3px 7px;*/ +/*border: 1px solid #000000;*/ +/*background-color: #ecf0f1;*/ +/*cursor: pointer;*/ +/*}*/ + +#copyBt { + box-sizing: border-box; + height: 20px; + width: 31%; + border: 1px solid #34495E; +} + +#sidebarExpandButton { + height: 24px; + width: 24px; + /*background-color: white;*/ + /*box-shadow: 0px 1px 1px grey;*/ + box-sizing: border-box; + top: 10px; + color: #000000; + float: right; + position: absolute; + right: 0; + border: 1px solid #000000; + + text-align: center; + font-size: 1.5em; + cursor: pointer; +} + +.dropdownMenuClass { + height: 20px; + /*width: 69%;*/ + float: right; + border: 1px solid #34495E; + background-color: #34495E; + color: white; + /*border-bottom: 1px solid #d90;*/ + text-align: left; + width: auto; +} + +#typeEditForm_datatype { + padding-top: 5px; +} + +#typeEditor { + width: 165px; +} + +#typeEditor_datatype { + width: 165px; +} + +#leftSideBarCollapseButton { + box-sizing: border-box; + top: 50px; + /*padding:5px;*/ + color: #000000; + position: absolute; + left: 200px; + border: 1px solid #000000; + /*background-color: #ecf0f1;*/ + cursor: pointer; + width: 24px; + height: 24px; + font-size: 1.5em; + text-align: center; +} + +#leftSideBarCollapseButton:hover { + background-color: #d90; +} + +#sidebarExpandButton:hover { + background-color: #d90; +} + +.spanForCharSelection { + padding-left: 25px; +} + +.nodeEditSpan { + color: #000; + background-color: #fff; + text-align: center; + /*overflow: auto;*/ + border: none; + padding-top: 6px; +} + +.nodeEditSpan:focus { + outline: none; + border: none; +} + +.foreignelements { + /*width: 80px;*/ + /*height: 3px;*/ + border: none; +} + +.foreignelements:focus { + outline: none; + border: none; +} + +#leftSideBarContent { + color: #000000; + float: left; + position: absolute; + left: 0; + /*border: 1px solid #000000;*/ + background-color: rgb(24, 32, 42); + width: 100%; + height: 100%; +} + +#leftSideBarContent > h3 { + color: #ecf0f1; + display: block; + font-size: 1.1em; + font-weight: 100; + margin: 0 0 5px 0; + padding: 10px 0; + text-align: left; +} + +#generalDetailsEdit { + /*color: #ecf0f1;*/ + color: #ecf0f1; +} + +#generalDetailsEdit > div { + padding: 5px; +} + +#generalDetailsEdit > h3 { + color: #ecf0f1; + display: block; + font-size: 1.1em; + font-weight: 100; + margin: 0 0 5px 0; + padding: 10px 0; + text-align: left; +} + +.subAccordion { + color: #ecf0f1; + display: block; + font-size: 0.8em; + font-weight: 100; + margin: 0; + padding: 5px; + text-align: left; +} + +.subAccordionDescription { + padding: 0 5px; +} + +.boxed { + padding: 0 5px; +} + +.separatorLineRight { + border-right: 1px solid #f00; +} + +.editPrefixButton:hover { + color: #ff972d; + cursor: pointer; +} + +.editPrefixIcon:hover { + stroke: #ff972d; + stroke-width: 1px; + cursor: pointer; +} + +.editPrefixIcon { + stroke: #fffff; + stroke-width: 1px; + cursor: pointer; +} + +.deletePrefixButton:hover { + color: #ff972d; + cursor: pointer; +} + +.deletePrefixButton { + color: #ff0000; + cursor: pointer; +} + +.invisiblePrefixButton { + cursor: default; + color: rgb(24, 32, 42); +} + +#containerForAddPrefixButton { + width: 100%; + margin-top: 5px; +} + +.roundedButton { + border: 1px solid #000000; + border-radius: 20px; + padding: 0 5px; + background: #fff; + cursor: pointer; + color: black; + outline: none; +} + +.roundedButton:hover { + background: #318638; + cursor: pointer; + color: #fff; + outline: none; +} + +#prefixURL_Description { + padding: 5px 0 0 0; +} + +.prefixIRIElements { + display: inline-block; + padding: 3px; + border-bottom: 1px solid #34495E; + width: 100% +} + +.prefixInput { + width: 30px; + display: inline-block; + margin-right: 5px; +} + +.prefixURL { + width: 100px; + display: inline-block; + paddig-left: 5px; +} + +.selectedDefaultElement { + text-align: left; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + display: inline-block; + max-width: 200px; +} + +#editHeader { + color: #ecf0f1; + background-color: #394f5a; + display: block; + font-size: 1.1em; + font-weight: 100; + text-align: center; +} + +#leftHeader { + color: #ecf0f1; + background-color: #394f5a; + display: block; + font-size: 1.1em; + font-weight: 100; + text-align: center; + padding: 10px 0; + margin: 0; +} + +.containerForDefaultSelection { + color: #ecf0f1; + display: block; + font-size: 1.1em; + font-weight: 100; + margin: 0; + padding: 10px 20px; + text-align: left; +} + +.defaultSelected { + color: #a15d05; + background-color: #283943; +} + +.containerForDefaultSelection:hover { + color: #f19505; + background-color: #394f5a; + display: block; + cursor: pointer; +} + +#containerForLeftSideBar { + top: 50px; + float: left; + position: absolute; + background-color: #1b252e; + left: 0; + width: 200px; + height: 200px; + overflow-y: auto; + overflow-x: hidden; +} + +#leftSideBar { + width: 100%; + background-color: rgb(24, 32, 42); +} + +#loading-info { + box-sizing: border-box; + position: absolute; + text-align: center; + + width: 100%; + height: 80%; + top: 0; +} + +#loading-info > div { + display: inline-block; + color: #ffffff; + background-color: #18202A; + border-bottom-left-radius: 2px; + border-bottom-right-radius: 2px; +} + +#loading-info > * > * { + padding: 5px; +} + +#loading-info { + pointer-events: none; +} + +#loading-progress { + pointer-events: auto; + min-width: 220px; + border-radius: 10px; +} + +#show-loadingInfo-button { + font-size: 12px; + color: #fff; + cursor: pointer; + text-align: center; +} + +#loadingIndicator_closeButton:hover { + color: #ff972d; + cursor: pointer; + +} + +#loadingIndicator_closeButton { + color: #ffe30f; + cursor: pointer; + padding-bottom: 5px; + float: right; +} + +.busyProgressBar { + background-color: #000; + height: 25px; + position: relative; + animation: busy 2s linear infinite; +} + +@-webkit-keyframes busy { + 0% { + left: 0%; + } + 50% { + left: 80%; + } + 100% { + left: 0%; + } +} + +#bulletPoint_container { + padding-left: 15px; + margin-top: 0px; + margin-bottom: 0px; +} + +#bulletPoint_container > div { + margin-left: -15px; +} + +#loadingInfo-container { + box-sizing: border-box; + text-align: left; + line-height: 1.2; + padding-top: 5px; + overflow: auto; + /*white-space: nowrap;*/ + /*min-width: 250px;*/ + height: 120px; + min-height: 40px; + background-color: #3c3c3c; + +} + +#error-description-button { + margin: 5px 0 0 0; + font-size: 12px; + color: #69c; + cursor: pointer; + text-align: center; +} + +#error-description-container { + box-sizing: border-box; + text-align: left; +} + +#error-description-container pre { + background-color: #34495E; + padding: 2px; + margin: 0; + white-space: pre-wrap; + max-height: calc(100vh - 125px); + max-width: 75vw; + overflow: auto; +} + +.spin { + display: inline-block; + -webkit-animation: spin 2s infinite linear; + animation: spin 2s infinite linear; +} + +@-webkit-keyframes spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} + +@keyframes spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} + +.truncate { + max-width: 250px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.color-mode-switch { + float: right; + width: 90px; + cursor: pointer; + height: 20px; + padding: 0; + border: 0; + color: #555; + background-color: #ECEEEF; + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.2), inset 0 0 3px rgba(0, 0, 0, 0.1); +} + +.color-mode-switch:focus { + outline-width: 0; +} + +.color-mode-switch.active { + color: #FFF; + background-color: #32CD32; + box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.2), inset 0 0 3px rgba(0, 0, 0, 0.1); +} + +/* adding button pulse animation*/ +.filterMenuButtonHighlight { + background-color: #d90; +} + +@-webkit-keyframes buttonAnimation { + 0% { + background-color: unset; + } + 100% { + background-color: #d90; + } +} + +@-moz-keyframes buttonAnimation { + 0% { + background-color: unset; + } + 100% { + background-color: #d90; + } +} + +@-o-keyframes buttonAnimation { + 0% { + background-color: unset; + } + 100% { + background-color: #d90; + } +} + +@keyframes buttonAnimation { + 0% { + background-color: unset; + } + 100% { + background-color: #d90; + } +} + +.buttonPulse { + -webkit-animation-name: buttonAnimation; + -moz-animation-name: buttonAnimation; + -o-animation-name: buttonAnimation; + animation-name: buttonAnimation; + + -webkit-animation-duration: 0.5s; + -moz-animation-duration: 0.5s; + -o-animation-duration: 0.5s; + animation-duration: 0.5s; + + -webkit-animation-iteration-count: 3; + -moz-animation-iteration-count: 3; + -o-animation-iteration-count: 3; + animation-iteration-count: 3; + + -webkit-animation-timing-function: linear; + -moz-animation-timing-function: linear; + -o-animation-timing-function: linear; + animation-timing-function: linear; + + +} + +/*swipe bar definition*/ + +/*Overwriting individual menu widths*/ +#m_about { + max-width: 200px; + width: 200px; + position: absolute; + +} + +#m_modes { + max-width: 160px; + width: 160px; + position: absolute; +} + +#m_filter { + max-width: 170px; + width: 170px; + position: absolute; +} + +#m_gravity { + max-width: 180px; + width: 180px; + position: absolute; +} + +#m_export { + max-width: 160px; + width: 160px; + position: absolute; + +} + +#exportedUrl { + width: 100px; +} + +#m_select { + max-width: 300px; + width: 300px; + position: absolute; +} + +#m_config { + max-width: 240px; + width: 240px; + position: absolute; +} + +#m_search { + max-width: 250px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +/***************** REWRITING MENU ELEMENT CONTAINERS ***********************/ +/*Container which holds the swipeBar*/ +#swipeBarContainer { + position: fixed; + width: 77.8%; + height: 40px; + margin: 0; + padding: 0; + bottom: 0; +} + +/*Scroll-able container for the menu entries */ +#menuElementContainer { + margin: 0; + padding: 0; + overflow-x: auto; + overflow-y: hidden; + white-space: nowrap; + text-align: right; + list-style-type: none; +} + +/*Style for the individual menu entries*/ +#menuElementContainer > li { + display: inline-block; + box-sizing: border-box; + text-align: left; + position: relative; + height: 40px; + font-size: 14px; + color: #ffffff; + padding: 12px 0 0; + margin-left: -4px; +} + +/*Font-color Style for menu entries */ +#menuElementContainer > li > a { + color: #fff; + padding: 9px 12px 12px 30px; +} + +.menuElementSvgElement { + height: 20px; + width: 20px; + display: block; + position: absolute; + top: 10px; + left: 8px; +} + +.btn_shadowed { + background-color: #fefefe; + box-shadow: 1px 1px 1px gray; +} + +.reloadCachedOntologyIcon { + height: 20px; + width: 108px; + display: block; + position: absolute; + top: 20px; + left: 3px; + /*background: #ecf0f1;;*/ + border: solid 1px black; + border-radius: 10px; + cursor: pointer; +} + +.reloadCachedOntologyIcon:disabled { + background: #f4f4f4; + cursor: auto; + border: solid 1px darkgray; + +} + +.reloadCachedOntologyIcon:hover { + background: #d90; + cursor: pointer; +} + +.disabledReloadElement { + cursor: auto; + background: #F4F4F4; + pointer-events: auto; + border: solid 1px darkgray; + color: #bbbbbb; +} + +.disabledReloadElement:hover { + cursor: auto; + background: #EEEEEE; + pointer-events: auto; +} + +#menuElementContainer > li > input { + color: #000; + /*padding : 0 0.3em 0 1.5em;*/ + padding: 0.1em .3em 0.1em 1.5em; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + width: 120px; +} + +/*Hovered behavior for the menu entries*/ +#menuElementContainer > li > a:hover { + box-sizing: border-box; + background: #1B252E; + /*background : #d90;*/ + color: #bdc3c7; + +} + +#empty:hover { + box-sizing: border-box; + background: #e1e1e1; + /*background : #d90;*/ + color: #2980b9; +} + +#empty.disabled { + pointer-events: none; + cursor: default; + color: #979797; +} + +.disabled { + pointer-events: none; + cursor: default; + color: #979797; +} + +/*ToolTip Menu Definition*/ +.toolTipMenu { + -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); + box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); + box-sizing: border-box; + background-color: #ffffff; + border: 1px solid rgba(0, 0, 0, 0.15); + border-bottom: none; + border-radius: 4px 4px 0 0; + bottom: 0; + display: none; + font-size: 14px; + list-style: none; + /*max-width: 300px;*/ + margin: 0; + padding: 0; + white-space: normal; + position: absolute; + z-index: 99; +} + +.toolTipMenu > li:first-of-type { + border: none; +} + +.toolTipMenu a { + color: #2980b9; +} + +.toolTipMenu > li { + border-top: solid 1px #bdc3c7; +} + +.toolTipMenu li { + color: #2980b9; + display: block; +} + +/*MenuElement hovering enables the toolTip of the corresponding menu*/ +#menuElementContainer > li:hover .toolTipMenu { + display: block; +} + +#menuElementContainer li > ul.toolTipMenu li a:hover { + background: #e1e1e1; +} + +/****************************************************************************/ +/*ScrollButton behavior*/ +#scrollLeftButton { + height: 30px; + width: 30px; + padding: 5px 0 5px 10px; + color: #fff; + cursor: pointer; + position: absolute; + margin-top: -2px; + font-size: 2em; + background-color: #24323e; + left: 0; +} + +#scrollLeftButton:focus { + outline: none; +} + +#scrollLeftButton:before { + content: "<"; +} + +/*Right Scroll Button*/ +#scrollRightButton { + height: 30px; + width: 30px; + padding: 5px 0 5px 10px; + color: #fff; + cursor: pointer; + position: absolute; + margin-top: -2px; + font-size: 2em; + background-color: #24323e; + right: 0; +} + +#scrollRightButton:focus { + outline: none; +} + +#scrollRightButton:hover { + color: #bdc3c7; +} + +#scrollLeftButton:hover { + color: #bdc3c7; +} + +#scrollRightButton:before { + content: ">"; +} + +#centerGraphButton, #zoomInButton, #zoomOutButton { + border: 1px solid #000000; + text-align: center; + margin: -1px 0 0 0; + font-size: 1.5em; + padding: 0; + height: 28px; +} + +.noselect { + -webkit-touch-callout: none; /* iOS Safari */ + -webkit-user-select: none; /* Safari */ + -khtml-user-select: none; /* Konqueror HTML */ + -moz-user-select: none; /* Firefox */ + -ms-user-select: none; /* Internet Explorer/Edge */ + user-select: none; + /* Non-prefixed version, currently + supported by Chrome and Opera */ +} + +#zoomOutButton { + line-height: 22px; +} + +#centerGraphButton { + line-height: 25px; +} + +#zoomInButton { + line-height: 25px; +} + +#zoomSlider > p:hover { + background-color: #d90; +} + +#zoomSliderParagraph { + color: #000000; + padding-top: 5px; + margin: -1px 0 0 0; + border: 1px solid #000000; + /*background-color: #ecf0f1;*/ + /*width: 28px;*/ + height: 150px; +} + +p#zoomSliderParagraph:hover { + background-color: #fff; +} + +/*todo put this in a proper position*/ +#zoomSlider { + width: 28px; + margin-top: -2px; + padding: 0; + font-size: 1.5em; + cursor: pointer; + position: absolute; + right: 20px; + bottom: 20px; + color: #000; + /*background-color: #ecf0f1;*/ + box-sizing: border-box; +} + +/****************************************************************************/ +/*Definition for the Icons before*/ +#menuElementContainer > li > a::before { + font-size: 1em; + margin: 0; + padding: 0 6px 0 0; +} + +#menuElementContainer a.highlighted { + background-color: #d90; +} + +/*#search-input-text.searchInputText {*/ +/*!*padding: 0 0.2em;*!*/ +/*color: black;*/ +/*}*/ + +.inner-addon { + position: relative; +} + +.searchIcon { + position: absolute; + /*padding: 0.15em 0;*/ + width: 17px; + height: 17px; + + pointer-events: none; +} + +.gearIcon { + position: absolute; + width: 17px; + height: 17px; + pointer-events: none; + left: -5px; +} + +/*#search-input-text::before {*/ +/*!*padding: 0 0.2em;*!*/ +/*!*color: black;*!*/ +/*font-size: 1.4em; !* todo : test this *!*/ +/*!*content: "\2315";*!*/ +/*content: "⚲";*/ +/*color: white;*/ +/*padding: 0;*/ +/*-webkit-transform: rotate(-45deg);*/ +/*!*content: "\2315" or "\1F50D"*!;*/ +/*display: inline-block;*/ +/*position: relative;*/ +/*top: 2px;*/ +/*left:-5px;*/ +/*}*/ + +li#c_search { + padding: 0 5px; + margin-left: 5px; + height: 20px; +} + +/*Menu icons before the links selection */ +/*#c_select > a::before { content: "\2263"; }*/ +/*#c_export > a::before { content: "\21E4"; }*/ +/*#c_gravity > a::before { content: "\2299"; }*/ +/*#c_filter > a::before { content: "\25BD"; }*/ +/*#c_modes > a::before { content: "\2606"; }*/ +/*#c_reset > a::before { content: "\21BB"; }*/ +/*#c_about > a::before { content: "\00A9"; }*/ + +li#c_locate { + padding: 0; +} + +#c_locate > a { + font-size: 2em; + padding: 0; +} + +a#pause-button { + padding: 12px 12px; +} + +/*Pause Button has a different behavior*/ +a#pause-button.paused::before { + content: "\25BA"; +} + +a#pause-button.paused:hover { + background-color: #d90; + color: #fff; +} + +a#pause-button:not(.paused)::before { + content: "II"; +} + +.toolTipMenu li:hover { + background-color: #e1e1e1; +} + +#emptyLiHover { + background-color: #FFFFFF; +} + +#emptyLiHover:hover { + background-color: #FFFFFF; +} + +.toggleOption li:hover { + background-color: #e1e1e1; +} + +.toggleOption { + padding: 8px 5px; +} + +#converter-option:hover { + background-color: #ffffff; +} + +.toolTipMenu li a:only-child, .option { + display: block; + float: none; + padding: 8px 5px; +} + +.customLocate { + padding: 0; + background-color: #32CD32; +} + +a#locateSearchResult { + padding-bottom: 0; + padding-top: 50px; + position: relative; + top: 5px; +} + +/*#sliderRange{*/ +/*padding: 0;*/ +/*margin: 7px 0 0 0;*/ +/*width:100%;*/ +/*height:5px;*/ +/*-webkit-appearance: none;*/ +/*outline: none;*/ +/*}*/ + +#zoomSliderElement { + color: #000; + position: relative; + padding-top: 0; + width: 155px; + height: 24px; + background-color: transparent; + -webkit-transform-origin-x: 73px; + -webkit-transform-origin-y: 73px; + -webkit-transform: rotate(-90deg); + -moz-transform-origin: 73px 73px; + transform: rotate(-90deg); + transform-origin: 73px 73px; + -webkit-appearance: none; + outline: none; + margin: 4px 0; +} + +/* ------------------ Zoom Slider styles --------------------------*/ +#zoomSliderElement::-webkit-scrollbar { + height: 0; +} + +#zoomSliderElement:hover { + cursor: crosshair; +} + +/*TRACK*/ +#zoomSliderElement::-webkit-slider-runnable-track { + width: 100%; + height: 5px; + cursor: pointer; + background: #3071a9; +} + +#zoomSliderElement::-moz-range-track { + width: 100%; + height: 5px; + cursor: pointer; + background: #3071a9; +} + +/*Thumb*/ +#zoomSliderElement::-webkit-slider-thumb { + -webkit-appearance: none; + border: 1px solid #000000; + height: 10px; + width: 30px; + margin-right: 50px; + border-radius: 3px; + background: #fff; + cursor: pointer; + outline: none; + margin-top: -3px; +} + +#zoomSliderElement::-ms-thumb { + -webkit-appearance: none; + border: 1px solid #000000; + height: 10px; + width: 30px; + margin-right: 50px; + border-radius: 3px; + background: #fff; + cursor: pointer; + outline: none; + margin-top: -3px; +} + +#zoomSliderElement::-ms-thumb:hover { + -webkit-appearance: none; + border: 1px solid #000000; + height: 10px; + width: 30px; + margin-right: 50px; + border-radius: 3px; + background: #d90; + cursor: pointer; + outline: none; + margin-top: -3px; +} + +#zoomSliderElement::-webkit-slider-thumb:hover { + -webkit-appearance: none; + border: 1px solid #000000; + height: 10px; + width: 30px; + margin-right: 50px; + border-radius: 3px; + background: #d90; + cursor: pointer; + outline: none; + margin-top: -3px; +} + +#zoomSliderElement::-moz-range-thumb { + border: 1px solid #000000; + height: 10px; + width: 30px; + border-radius: 3px; + /*background: #ffffff;*/ + cursor: pointer; + outline: none; +} + +#zoomSliderElement::-moz-range-thumb:hover { + border: 1px solid #000000; + height: 10px; + width: 30px; + border-radius: 3px; + background: #d90; + cursor: pointer; + outline: none; +} + +#zoomSliderElement::-moz-focus-outer { + border: 0; +} + +#locateSearchResult:focus { + outline: none; + +} + +a#locateSearchResult.highlighted:hover { + background-color: #d90; + color: red; +} + +a#locateSearchResult { + outline: none; + padding-bottom: 0; + padding-top: 0; + position: relative; + top: 5px; +} + +/*Editor hints*/ +#editorHint { + padding: 5px 5px; + position: absolute; + text-align: center; + width: 100%; + pointer-events: none; +} + +#editorHint label { + pointer-events: auto; + float: right; + padding: 5px 5px; + color: #ffdd00; +} + +#editorHint label:hover { + text-decoration: underline; + cursor: pointer; +} + +#editorHint > div { + pointer-events: auto; + text-align: left; + display: inline-block; + color: #ffffff; + font-size: 0.8em; + background-color: #18202A; + padding: 5px 5px; + border-radius: 5px; + +} + +#WarningErrorMessagesContainer { + position: absolute; + text-align: center; + top: 0; + pointer-events: none; +} + +/*Editor hints*/ +#WarningErrorMessages { + position: relative; + /*text-align: center;*/ + width: 50%; + pointer-events: auto; + margin: 10px 0; + padding-right: 12px; + overflow-y: auto; + overflow-x: hidden; +} + +#WarningErrorMessages label { + pointer-events: auto; + float: right; + padding: 5px 5px; + color: #ffdd00; +} + +#WarningErrorMessages span { + pointer-events: auto; + float: right; + padding: 5px 5px; +} + +#WarningErrorMessages label:hover { + text-decoration: underline; + cursor: pointer; +} + +#WarningErrorMessages > div { + pointer-events: auto; + text-align: left; + display: inline-block; + color: #ffffff; + font-size: 0.8em; + background-color: #18202A; + padding: 5px 5px; + border-radius: 10px; + border: solid 1px #ecf0f1; + width: 70%; + +} + +#WarningErrorMessagesContent > ul { + -webkit-padding-start: 20px; + padding: 0 16px; + +} + +#WarningErrorMessagesContent > ul > li { + padding: 5px; +} + +.converter-form-Editor { + /*display: inline-block;*/ +} + +.textLineEditWithLabel { + display: inline-block; + width: 100%; + border-bottom: 1px solid #34495E; + padding: 2px 0; + +} + +.converter-form-Editor label { + /*//display: inline-block;*/ + line-height: normal; +} + +.descriptionTextClass { + background-color: #34495E; + color: white; +} + +.prefixIRIElements input { + border: 1px solid #34495E; + background-color: #34495E; + color: white; +} + +.prefixIRIElements input:disabled { + background-color: rgb(24, 32, 42); + border: 1px solid rgb(24, 32, 42); + color: white; +} + +.converter-form-Editor input { + /*box-sizing: border-box;*/ + /*height: 18px;*/ + /*width: 69%;*/ + float: right; + border: 1px solid #34495E; + background-color: #34495E; + color: white; + /*border-bottom: 1px solid #d90;*/ + /*text-align: center;*/ + /*display: inline-block;*/ +} + +.converter-form-Editor input:disabled { + background-color: #545350; + border: 1px solid #34495E; + color: #939798; +} + +.disabledLabelForSlider { + color: #808080; +} diff --git a/webvowl/css/webvowl.css b/webvowl/css/webvowl.css new file mode 100644 index 0000000..bd06623 --- /dev/null +++ b/webvowl/css/webvowl.css @@ -0,0 +1,296 @@ +/*----------------------------------------------------------------- + VOWL graphical elements (part of spec) - mixed CSS and SVG styles +-----------------------------------------------------------------*/ + +/*-------- Text --------*/ +.text { + font-family: Helvetica, Arial, sans-serif; + font-size: 12px; +} + +.subtext { + font-size: 9px; +} + +.text.instance-count { + fill: #666; +} + +.external + text .instance-count { + fill: #aaa; +} + +.cardinality { + font-size: 10px; +} + +.text, .embedded { + pointer-events: none; +} + +/*------- Colors ------*/ +.class, .object, .disjoint, .objectproperty, .disjointwith, .equivalentproperty, .transitiveproperty, .functionalproperty, .inversefunctionalproperty, .symmetricproperty, .allvaluesfromproperty, .somevaluesfromproperty { + fill: #acf; +} + +.label .datatype, .datatypeproperty { + fill: #9c6; +} + +.rdf, .rdfproperty { + fill: #c9c; +} + +.literal, .node .datatype { + fill: #fc3; +} + +.deprecated, .deprecatedproperty { + fill: #ccc; +} + +.external, .externalproperty { + /*fill: #36c;*/ +} + +path, .nofill { + fill: none; +} + +marker path { + fill: #000; +} + +.class, path, line, .fineline { + stroke: #000; +} + +.white, .subclass, .subclassproperty, .external + text { + fill: #fff; +} + +.class.hovered, .property.hovered, .cardinality.hovered, .cardinality.focused, .filled.hovered, .filled.focused, .values-from.filled.hovered { + fill: #f00 !important; + cursor: pointer; +} + +.hoveredForEditing { + fill: #f00 !important; + cursor: pointer; +} + +.feature { + fill: #f00; + cursor: pointer; +} + +@-webkit-keyframes pulseAnimation { + 0% { + -webkit-transform: scale(1.5); + stroke-width: 3.33; + } + 50% { + stroke-width: 4; + } + 100% { + -webkit-transform: scale(1.0); + stroke-width: 5; + } +} + +@-moz-keyframes pulseAnimation { + 0% { + -webkit-transform: scale(1.5); + stroke-width: 3.33; + } + 50% { + stroke-width: 4; + } + 100% { + -webkit-transform: scale(1.0); + stroke-width: 5; + } +} + +@-o-keyframes pulseAnimation { + 0% { + -webkit-transform: scale(1.5); + stroke-width: 3.33; + } + 50% { + stroke-width: 4; + } + 100% { + -webkit-transform: scale(1.0); + stroke-width: 5; + } +} + +@keyframes pulseAnimation { + 0% { + -webkit-transform: scale(1.5); + stroke-width: 3.33; + } + 50% { + stroke-width: 4; + } + 100% { + -webkit-transform: scale(1.0); + stroke-width: 5; + } +} + +.searchResultA { + fill: none; + stroke-width: 5; + stroke: #f00; + -webkit-animation-name: pulseAnimation; + -moz-animation-name: pulseAnimation; + -o-animation-name: pulseAnimation; + animation-name: pulseAnimation; + + -webkit-animation-duration: 0.8s; + -moz-animation-duration: 0.8s; + -o-animation-duration: 0.8s; + animation-duration: 0.8s; + + -webkit-transform: translateZ(0); + -o-transform: translateZ(0); + -webkit-animation-iteration-count: 3; + -moz-animation-iteration-count: 3; + -o-animation-iteration-count: 3; + animation-iteration-count: 3; + + -webkit-animation-timing-function: linear; + -moz-animation-timing-function: linear; + -o-animation-timing-function: linear; + animation-timing-function: linear; + +} + +/* a class for not animated search results (hovered over node)*/ +.searchResultB { + fill: none; + stroke-width: 5; + stroke: #f00; +} + +.hovered-MathSymbol { + fill: none; + stroke: #f00 !important; +} + +.focused, path.hovered { + stroke: #f00 !important; +} + +.indirect-highlighting, .feature:hover { + fill: #f90; + cursor: pointer; +} + +.feature_hover { + fill: #f90; + cursor: pointer; +} + +.values-from { + stroke: #69c; +} + +.symbol, .values-from.filled { + fill: #69c; +} + +/*------- Strokes ------*/ +.class, path, line { + stroke-width: 2; +} + +.fineline { + stroke-width: 1; +} + +.dashed, .anonymous { + stroke-dasharray: 8; +} + +.dotted { + stroke-dasharray: 3; +} + +rect.focused, circle.focused { + stroke-width: 4px; +} + +.nostroke { + stroke: none; +} + +/*----------------------------------------------------------------- + Additional elements for the WebVOWL demo (NOT part of spec) +-----------------------------------------------------------------*/ + +.addDataPropertyElement { + fill: #9c6 !important; + cursor: pointer; + stroke-width: 2; + stroke: black; +} + +.addDataPropertyElement:hover { + fill: #f90 !important; + cursor: pointer; + stroke-width: 2; + stroke: black; +} + +.superHiddenElement { + fill: rgba(255, 153, 0, 0.4); + cursor: pointer; + stroke-width: 0; + stroke: black; + /*opacity:0;*/ +} + +.superOpacityElement { + opacity: 0; +} + +.deleteParentElement:hover { + fill: #f90; + cursor: pointer; + stroke-width: 2; + stroke: black; +} + +.deleteParentElement { + fill: #f00; + cursor: pointer; + stroke-width: 2; + stroke: black; +} + +.classNodeDragPath { + stroke: black; + stroke-width: 2px; +} + +.classDraggerNodeHovered { + fill: #f90; + stroke: black; + stroke-width: 2px; + cursor: pointer; +} + +.classDraggerNode { + fill: #acf; + stroke: black; + stroke-width: 2px; +} + +marker path { + /* Safari and Chrome workaround for inheriting the style of its link. + Use any value that is larger than the length of the marker path. */ + stroke-dasharray: 100; +} diff --git a/webvowl/data/bot.json b/webvowl/data/bot.json new file mode 100644 index 0000000..4492645 --- /dev/null +++ b/webvowl/data/bot.json @@ -0,0 +1,2153 @@ +{ + "_comment" : "Created with OWL2VOWL (version 0.3.7), http://vowl.visualdataweb.org", + "header" : { + "languages" : [ "de", "fi", "sv", "pt", "en", "it", "fr", "zh-cn", "es", "undefined", "cs", "sk", "fa", "da", "tr", "ca", "nl" ], + "baseIris" : [ "https://w3id.org/bot", "http://www.w3.org/1999/02/22-rdf-syntax-ns", "http://purl.org/vocommons/voaf", "http://www.w3.org/2000/01/rdf-schema", "https://schema.org", "http://www.w3.org/2001/XMLSchema", "http://www.w3.org/2006/vcard/ns" ], + "prefixList" : { + "owl" : "http://www.w3.org/2002/07/owl#", + "vann" : "http://purl.org/vocab/vann/", + "dbo" : "http://dbpedia.org/ontology/", + "dcterms" : "http://purl.org/dc/terms/", + "vcard" : "http://www.w3.org/2006/vcard/ns#", + "xsd" : "http://www.w3.org/2001/XMLSchema#", + "rdfs" : "http://www.w3.org/2000/01/rdf-schema#", + "voaf" : "http://purl.org/vocommons/voaf#", + "rdf" : "http://www.w3.org/1999/02/22-rdf-syntax-ns#", + "" : "http://www.semanticweb.org/owl/owlapi/turtle#", + "dce" : "http://purl.org/dc/elements/1.1/", + "xml" : "http://www.w3.org/XML/1998/namespace", + "vs" : "http://www.w3.org/2003/06/sw-vocab-status/ns#", + "schema" : "https://schema.org/", + "bot" : "https://w3id.org/bot#" + }, + "title" : { + "en" : "The Building Topology Ontology (BOT)" + }, + "iri" : "https://w3id.org/bot#", + "version" : "0.3.2", + "author" : [ "https://orcid.org/0000-0002-6519-7057", "Mads Holten Rasmussen", "Pieter Pauwels", "Maxime Lefrançois", "Georg Ferdinand Schneider", "https://orcid.org/0000-0001-8020-4609", "http://maxime-lefrancois.info/me#", "https://orcid.org/0000-0002-2033-859X" ], + "description" : { + "en" : "The Building Topology Ontology (BOT) is a simple ontology defining the core concepts of a building.\nIt is a simple, easy to extend ontology for the construction industry to document and exchange building data on the web.\nChanges since version 0.2.0 of the ontology are documented in:\nhttps://w3id.org/bot/bot.html#changes\nThe version 0.2.0 of the ontology is documented in:\nMads Holten Rasmussen, Pieter Pauwels, Maxime Lefrançois, Georg Ferdinand Schneider, Christian Anker Hviid and Jan Karlshøj (2017) Recent changes in the Building Topology Ontology, 5th Linked Data in Architecture and Construction Workshop (LDAC2017), November 13-15, 2017, Dijon, France, https://www.researchgate.net/publication/320631574_Recent_changes_in_the_Building_Topology_Ontology\nThe initial version 0.1.0 of the ontology was documented in:\nMads Holten Rasmussen, Pieter Pauwels, Christian Anker Hviid and Jan Karlshøj (2017) Proposing a Central AEC Ontology That Allows for Domain Specific Extensions, Lean and Computing in Construction Congress (LC3): Volume I – Proceedings of the Joint Conference on Computing in Construction (JC3), July 4-7, 2017, Heraklion, Greece, pp. 237-244 https://doi.org/10.24928/JC3-2017/0153" + }, + "other" : { + "priorVersion" : [ { + "identifier" : "priorVersion", + "language" : "undefined", + "value" : "https://w3id.org/bot-0.3.1", + "type" : "iri" + } ], + "license" : [ { + "identifier" : "license", + "language" : "undefined", + "value" : "https://creativecommons.org/licenses/by/1.0/", + "type" : "iri" + } ], + "creator" : [ { + "identifier" : "creator", + "language" : "undefined", + "value" : "Pieter Pauwels", + "type" : "label" + }, { + "identifier" : "creator", + "language" : "undefined", + "value" : "Maxime Lefrançois", + "type" : "label" + }, { + "identifier" : "creator", + "language" : "undefined", + "value" : "https://orcid.org/0000-0002-2033-859X", + "type" : "iri" + }, { + "identifier" : "creator", + "language" : "undefined", + "value" : "https://orcid.org/0000-0002-6519-7057", + "type" : "iri" + }, { + "identifier" : "creator", + "language" : "undefined", + "value" : "Georg Ferdinand Schneider", + "type" : "label" + }, { + "identifier" : "creator", + "language" : "undefined", + "value" : "https://orcid.org/0000-0001-8020-4609", + "type" : "iri" + }, { + "identifier" : "creator", + "language" : "undefined", + "value" : "Mads Holten Rasmussen", + "type" : "label" + }, { + "identifier" : "creator", + "language" : "undefined", + "value" : "http://maxime-lefrancois.info/me#", + "type" : "iri" + } ], + "contributor" : [ { + "identifier" : "contributor", + "language" : "undefined", + "value" : "Jyrki Oraskari", + "type" : "label" + }, { + "identifier" : "contributor", + "language" : "undefined", + "value" : "Richard Pinka", + "type" : "label" + }, { + "identifier" : "contributor", + "language" : "undefined", + "value" : "Hervé Pruvost", + "type" : "label" + }, { + "identifier" : "contributor", + "language" : "undefined", + "value" : "All contributing members of the W3C Linked Building Data Community Group", + "type" : "label" + }, { + "identifier" : "contributor", + "language" : "undefined", + "value" : "Karl Hammar", + "type" : "label" + }, { + "identifier" : "contributor", + "language" : "undefined", + "value" : "Walter Terkaj", + "type" : "label" + }, { + "identifier" : "contributor", + "language" : "undefined", + "value" : "Sjoerd Rongen", + "type" : "label" + }, { + "identifier" : "contributor", + "language" : "undefined", + "value" : "María Poveda-Villalón", + "type" : "label" + }, { + "identifier" : "contributor", + "language" : "undefined", + "value" : "Ville Kukkonen", + "type" : "label" + }, { + "identifier" : "contributor", + "language" : "undefined", + "value" : "Rui Ma", + "type" : "label" + }, { + "identifier" : "contributor", + "language" : "undefined", + "value" : "Katja Breitenfelder", + "type" : "label" + }, { + "identifier" : "contributor", + "language" : "undefined", + "value" : "Mathias Bonduel", + "type" : "label" + }, { + "identifier" : "contributor", + "language" : "undefined", + "value" : "Ali Kücükavci", + "type" : "label" + }, { + "identifier" : "contributor", + "language" : "undefined", + "value" : "Ana Roxin", + "type" : "label" + }, { + "identifier" : "contributor", + "language" : "undefined", + "value" : "Edison Chung", + "type" : "label" + }, { + "identifier" : "contributor", + "language" : "undefined", + "value" : "Lars Wikström", + "type" : "label" + }, { + "identifier" : "contributor", + "language" : "undefined", + "value" : "Pouya Zangeneh", + "type" : "label" + }, { + "identifier" : "contributor", + "language" : "undefined", + "value" : "Gonçal Costa", + "type" : "label" + }, { + "identifier" : "contributor", + "language" : "undefined", + "value" : "Rui de Klerk", + "type" : "label" + } ], + "preferredNamespacePrefix" : [ { + "identifier" : "preferredNamespacePrefix", + "language" : "undefined", + "value" : "bot", + "type" : "label" + } ], + "modified" : [ { + "identifier" : "modified", + "language" : "undefined", + "value" : "2020-07-31T08:51:00", + "type" : "label" + } ], + "versionInfo" : [ { + "identifier" : "versionInfo", + "language" : "undefined", + "value" : "0.3.2", + "type" : "label" + } ], + "preferredNamespaceUri" : [ { + "identifier" : "preferredNamespaceUri", + "language" : "undefined", + "value" : "https://w3id.org/bot#", + "type" : "iri" + } ], + "title" : [ { + "identifier" : "title", + "language" : "en", + "value" : "The Building Topology Ontology (BOT)", + "type" : "label" + } ], + "issued" : [ { + "identifier" : "issued", + "language" : "undefined", + "value" : "2018-06-21T12:00:00", + "type" : "label" + } ], + "seeAlso" : [ { + "identifier" : "seeAlso", + "language" : "undefined", + "value" : "https://www.researchgate.net/publication/320631574_Recent_changes_in_the_Building_Topology_Ontology", + "type" : "iri" + }, { + "identifier" : "seeAlso", + "language" : "undefined", + "value" : "https://doi.org/10.24928/JC3-2017/0153", + "type" : "iri" + }, { + "identifier" : "seeAlso", + "language" : "undefined", + "value" : "http://www.semantic-web-journal.net/system/files/swj2279.pdf", + "type" : "iri" + } ] + } + }, + "namespace" : [ ], + "class" : [ { + "id" : "0", + "type" : "owl:Class" + }, { + "id" : "3", + "type" : "owl:Class" + }, { + "id" : "9", + "type" : "owl:Class" + }, { + "id" : "21", + "type" : "owl:Class" + }, { + "id" : "11", + "type" : "owl:Class" + }, { + "id" : "28", + "type" : "owl:Thing" + }, { + "id" : "29", + "type" : "owl:Class" + }, { + "id" : "19", + "type" : "owl:Thing" + }, { + "id" : "17", + "type" : "rdfs:Literal" + }, { + "id" : "36", + "type" : "owl:Class" + }, { + "id" : "13", + "type" : "owl:Thing" + }, { + "id" : "24", + "type" : "owl:Class" + }, { + "id" : "6", + "type" : "owl:Class" + }, { + "id" : "2", + "type" : "owl:Class" + } ], + "classAttribute" : [ { + "iri" : "https://w3id.org/bot#Interface", + "baseIri" : "https://w3id.org/bot", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/bot#", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "stable", + "type" : "label" + } ] + }, + "label" : { + "de" : "Schnittstelle", + "IRI-based" : "Interface", + "sv" : "Gränssnitt", + "fi" : "Rajapinta", + "pt" : "Interface", + "en" : "Interface", + "it" : "Interfaccia", + "fr" : "Interface", + "zh-cn" : "界面", + "es" : "Interfaz", + "cs" : "Rozhraní", + "sk" : "Rozhranien", + "fa" : "رابط", + "da" : "Grænseflade", + "nl" : "Interface", + "ca" : "Interfície", + "tr" : "Arayüzey" + }, + "comment" : { + "de" : "Ein allgemeines Konzept um eine qualifizierte Beziehung zwischen einem oder mehreren Dingen auf der Welt auszudrücken. Hierbei ist wenigstens eines der Dinge ein Bauteil oder eine Zone eines Gebäudes. Beispiele: - Qualifizierung des Wärmeübergangs durch ein oder mehrere Bauteile. Dies umfasst eindimensionale Wärmeübertragung (Fläche) durch ein Bauteil von einer Zone zur nächsten; zweidimensionaler Wärmeübergang (Linie) von einer Zone zur nächsten an der Kontaktstelle, an der sich diese treffen oder dreidimensional (Punkt) von einer zone zur nächsten an der drei Bauteile sich treffen (typischerweise ist dies der Fall, wenn zwei Wände und die Decke sich treffen); - Verbindung eines elektrischen Geräts mit dem elektrischen Versorgungssystem eines Gebäudes; - Eine Tür zwischen zwei Räumen.", + "fi" : "Yleinen konsepti kahden tai useamman asian rajapinnan määrittämiseen, missä ainakin toinen asia on joko elementti tai vyöhyke. Esimerkkejä:n - Kahden vyöhykkeen välillä yhden tai useamman elementin kautta tapahtuvan lämmönsiirtymisen määrittely. Tämä sisältää yksiulotteiset (pinta) lämpöhäviöt vyöhykeeltä toiselle yhden rakennuselementin kautta, kaksiulotteiset (jana) häviöt yhdeltä vyöhykkeeltä toiselle kahden elementin yhteenliitoskohdissa, tai kolmiulotteiset (piste) häviöt yhdeltä vyöhykkeeltä toiselle kolmen elementin (yleensä kaksi seinää ja taso) yhteenliitospisteessä.n - Sähkölaitteen liitos rakennuksen sähköjärjestelmään.n - Ovi kahden huoneen välillä.", + "sv" : "Ett generiskt koncept som beskriver relationen mellan två eller flera saker i världen, där åtminstone den ena är ett byggdel eller en zon. Exempelvis: n- Beskrivning av värmeöverföring mellan zoner genom en eller flera byggdelar. Detta inkluderar endimensionella värmeförluster från en zon till en annan genom en enkel byggdels yta, tvådimensionella förluster från en zon till en annan genom linjen där zonernas respektive byggdelar möts, eller tredimentionella förluster från en zon till en annan genom en punkt där tre byggdelar (vanligtvis två väggar och en platta) möts.n- Kopplingen mellan en elektrisk apparatur och elsystemet i en byggnad.n- En dörr mellan ett rum och ett annat.", + "pt" : "Conceito genérico para qualificar a relação entre duas ou mais coisas no mundo, onde pelo menos uma é um elemento de edifício ou uma zona. Exemplos:n- Qualificação de transmissão de calor entre zonas através de um ou mais elementos do edifício. Isto inclui perdas de calor unidimensionais (superfície) de uma zona para outra através de um único elemento do edifício, uma perda bidimensional (linha) de uma zona para outra através da conexão onde os dois elementos se encontram ou uma perda tridimensional (ponto) de uma zona para outra através da conexão onde três elementos se encontram (tipicamente duas paredes e uma laje).n- Conexão de um equipamento eléctrico ao sistema eléctrico de um edifício.n- Uma porta entre dois compartimentos.", + "en" : "A generic concept to qualify the relationship of two or more things in the world, where at least one is a building element or zone. Examples:n - Qualification of heat transmission between zones through one or more building elements. This includes one-dimensional (surface) heat losses from one zone to another through a single building element, a two dimensional (line) loss from one zone to another through the connection in which the two elements meet or a three dimensional (point) loss from one zone to another through the connection where three elements (typically two walls and a slab) meet. n - Connection of an electric device to the electric system of a building. n - A door between one room and another.", + "it" : "Concetto generico per caratterizzare la relazione fra due o più cose nel mondo, dove almeno una di queste è un elemento di costruzione o una zona. Esempi:n - La certificazione della trasmissione di calore tra zone attraverso uno o più elementi di costruzione. Questo include la dispersione termica unidimensionale (superficie) da una zona ad un'altra attraverso un singolo elemento di costruzione, un dispersione bidimensionale (linea) da una zona ad un'altra attraverso la connessione dove i due elementi si incontrano, una dispersione tridimensionale (punto) da una zona ad un'altra attraverso la connessione dove tre elementi (tipicamente due pareti e una soletta) si incontrano.n - Connessione di un dispositivo elettrico con un impianto elettrico di un edificio.n - Una porta tra una stanza e un'altra.", + "fr" : "Une interface correspond à la surface où se rencontrent a) deux éléments d'un bâtiment, b) deux zones ou encore c) un élément d'un bâtiment avec une zone. Un cas d'utilisation type est constituée par la qualification de la zone de transmission de chaleur entre une zone et un mur couvrant plusieurs zones.", + "zh-cn" : "这是一种通用概念,用于限定世界上两个或多个事物之间的关系,其中二者至少一个是建筑构件或区域。 比如说:rn -通过一个或多个建筑构件或建筑区域之间的热传递。 这包括通过单个建筑构件从一个区域到另一区域的一维(表面)热损失,通过两个构件的相接从一个区域到另一区域的二维(线)热损失或通过三个元素(通常是两堵墙和一个平板)的相接从一个区域到另一个区域的三维(点)损耗。rn-将电气设备连接到建筑电气系统。rn-房间之间的门n", + "es" : "Concepto genérico para calificar la relación de dos o más cosas en el mundo, donde al menos una es un elemento o zona de construcción. nEjemplos:n- Calificación de la transmisión de calor entre zonas a través de uno o más elementos de construcción. Esto incluye pérdidas de calor unidimensionales (de superficie) de una zona a otra a través de un único elemento de construcción, una pérdida bidimensional (línea) de una zona a otra a través de la conexión en la que los dos elementos se encuentran, o una pérdida tridimensional de una zona a otra a través de la conexión donde se encuentran tres elementos (típicamente dos paredes y una losa).n- Conexión de un dispositivo eléctrico al sistema eléctrico de un edificio.n- Una puerta entre una habitación y otra.", + "cs" : "Rozhraní je obecný koncept který definuje vztah dvou a víc věcí ve fyzickém světě, kde alespoň jeden z nich je stavební element nebo zóna. nPříklady:nkoncepce přenosu tepla mezi zónami prostřednictvím jednoho nebo vícero stavebních elementů. To obsahuje plošnou tepelnou výměnu z jedné do druhé zóna přes jeden stavební objekt, dále to obsahuje tepelnou výměnu lineární vazbou, dále to obsahuje tepelnou výměnu bodem v/na elementu nebo elementech (typicky dvě stěny a podlaha či strop). n - spojení elektrického zařízení do elektrického systému v budově.n - dveře mezi dvěma pokojin", + "sk" : "Rozhranie je obecný koncept, ktorý definuje vzťah dvoch a viac vecí vo fyzickom svete, kde aspoň jeden z nich je stavebný prvok alebo zóna. nPríklady:n- koncepcia prenosu tepla mezi zónami prostredníctvom jedného alebo viacero stavebných elementov. To obshuje plošnú tepelnú výmenu z jednej do druhej zóny cez jeden stavebný element, ďalej to obsahuje tepelnou výmenu lineárnou väzbou, ďalej to obsahuje tepelnú výmenu bodom v/na elemente alebo elementoch (typicky dve steny a podlaha, či strop).n- spojenie elektrického zariadenia do elektrického systému v budove. n- dvere medzi dvomi miestnosťami. n", + "fa" : "یک مفهوم کلی از شرایط رابطه بین دو یا چند چیزدر دنیا، در حالی که حداقل یکی از آنها المان یا منطقه است. مثال:n- شرایط انتقال گرما بین یک منطقه و منطقه دیگر از طریق یک یا چند المان ساختمان. این میتواند شامل انتقال/اتلاف گرمای یک بعدی (سطحی) از یک منطقه به منطقه‌ی دیگر از طریق یک المان ساختمان؛ یا، انتقال/اتلاف گرمای دو بعدی (خطی) از یک منطقه به منطقه‌ی دیگر از طریق اتصال بین دو المان ساختمان؛ و یا، انتقال/اتلاف گرمای سه بعدی (نقطه‌ای) از یک منطقه به منطقه‌ی دیگر از طریق برقراری اتصال بین سه المان ساختمان (معمولا دو دیوار و یک دال) باشد.n- ارتباط یک دستگاه الکتریکی با یک سیستم الکتریکی ساختمان.n- یک در بین یک اتاق و اتاق دیگر.n", + "da" : "Et generisk koncept til at kvalificere forholdet mellem to eller flere ting i verden, hvoraf mindst den ene er en bygningsdel eller -zone. Eksempler:n - Kvalificering af varmeoverførsel mellem zoner gennem en eller flere bygningsdele. Dette inkluderer endimensionelle (flade) varmetab fra en zone til en anden gennem en enkelt bygningsdel, todimensionelle (linie) tab fra en zone til en anden gennem den samling, hvor de to elementer mødes, eller tredimensionelle (punkt) tab fra en zone til en anden gennem samlingen, hvor tre elementer (typisk to vægge og et dæk) mødes.n - Forbindelsen mellem et elektrisk device og det elektriske system i en bygning.n - En dør mellem et rum og et andet.", + "ca" : "Concepte genèric per qualificar la relació de dues o més coses del món, on almenys una d'elles és un element o zona constructiva. nExemples:n- Qualificació de la transmissió de calor entre zones a través d’un o més elements d’edificació. Això inclou pèrdues de calor (superficials) unidimensionals d'una zona a una altra mitjançant un element de construcció, una pèrdua bidireccional (en línia) d'una zona a una altra mitjançant la connexió en què es troben els dos elements, o una pèrdua tridimensional (en un punt) d’una zona a una altra mitjançant la connexió on es reuneixen tres elements (normalment dues parets i una llosa).n- Connexió d’un dispositiu elèctric al sistema elèctric d’un edifici.n- Una porta entre una habitació i una altra.", + "tr" : "Arayüz, iki bina parçası, iki bölge veya bir bina parçası ile bir bölgenin buluştuğu alandır. İkisi arasındaki bağlantıyı nitelendirmek için kullanılabilir. Bir kullanım durumu, bir bölge ve birkaç bölgeyi kapsayan bir duvar arasındaki ısı transfer alanının niteliği olabilir.", + "nl" : "Een generiek concept om een kwalificeerbare relatie te creëren tussen twee of meer dingen uit de wereld, waarbij er minstens één een gebouwelement of zone is. Voorbeelden:n - kwalificeren van de warmte transmissie tussen gebouw zones doorheen één of meerdere gebouwelementen. Dit omvat ééndimensionele (oppervlakte) warmteverliezen van één zone naar een andere zone doorheen een gebouwelement, tweedimensionele (lijn) verliezen van één zone naar een andere zone doorheen de connectie tussen twee gebouwelementen of driedimensionele (punt) verliezen van één zone naar een andere zone doorheen de connectie tussen drie gebouwelementen (typisch twee muren en een vloer- of dakplaat).n - Connectie tussen een elektrisch toestel en het elektrisch systeem van een gebouw.n - Een deur tussen twee ruimtes" + }, + "id" : "0" + }, { + "iri" : "https://w3id.org/bot#Storey", + "baseIri" : "https://w3id.org/bot", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/bot#", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "stable", + "type" : "label" + } ] + }, + "label" : { + "de" : "Geschoss (Architektur)", + "IRI-based" : "Storey", + "sv" : "Våning", + "fi" : "Kerros", + "pt" : "Piso", + "en" : "Storey", + "it" : "Piano di edificio", + "fr" : "Étage", + "zh-cn" : "楼层", + "es" : "Piso", + "cs" : "Podlaží", + "sk" : "Podlažie", + "fa" : "طبقه", + "da" : "Etage", + "ca" : "Pis", + "tr" : "Kat", + "nl" : "Verdieping" + }, + "comment" : { + "de" : "Ein Teil der realen oder virtuellen Welt die beide Teil dieser Welt sind und eine räumliche Ausdehnung hat. Ein bot:Storey ist in einem oder mehreren Gebäuden enthalten und es besteht die Absicht oder es ist der Fall, dass es ein oder mehrere Räume enthält, die horizontal miteinander verbunden sind. Geschosse eines Gebäudes sind vertikal miteinander verbunden, durch zum Beispiel Aufzüge oder Treppen. Ein bot:Storey umfassst zonen die über und unter der Erdoberfläche liegen. Zum Beispiel hat ein Gebäude mit 21 Geschossen über der Erde, ein Erdgeschoss und 3 Kellerstockwerken insgesamt 25 Instanzen von bot:Storey.", + "fi" : "Fyysisen tai virtuaalisen maailman osa, joka luonnostaan sekä sijaitsee tässä maailmassa että omaa kolmiulotteiset tilalliset ulottuvuudet. bot:Storey sisältyy yhteen tai useampaan rakennukseen, ja sen tarkoitus on sisältää yksi tai useampi tila jotka ovat vaakasuunnassa yhteydessä. Rakennuksen kerrokset ovat yhteydessä toisiinsa pystysuuntaisilla yhteyksillä, kuten hisseillä ja rappusilla. bot:Storey kattaa vyöhykkeet sekä maan alla että päällä. Esimerkiksi rakennus, jossa on pohjakerros, 21 kerrosta sen yläpuolella, ja 3 kerrosta kellaria, on yhtäläinen seuraavan lauseen kanssa: rakennuksella on 25 bot:Storey instanssia.", + "sv" : "En del av den fysiska världen eller en virtuell värld som har en spatial utsträckning i tre dimensioner. En bot:Storey är inrymd i en eller flera byggnader, och är menad att innehålla ett eller flera utrymmen som är förbundna horisontellt. Sådana våningar i en byggnad är förbundna med hjälp av lodrätta förbindelser såsom hissar och trappor. Bot:Storey kan användas för att beskriva såväl våningar över som under mark; till exempel så har en byggnad med 21 våningar över marken, en entrénvåning, och tre källarvåningar totalt 25 bot:Storey-instanser.", + "pt" : "Uma parte do mundo físico ou do mundo virtual que está inerentemente localizada neste mundo e que tem uma extensão espacial tridimensional. nUm bot:Storey está contido num ou mais edifícios e está destinado a conter um ou mais espaços que estejam conectados horizontalmente. Os pisos de um edifício estão ligados através de ligações verticais tais como escadas e elevadores.nUm bot:Storey abrange tanto as zonas acima como abaixo do solo; por exemplo, um edifício com 21 andares acima do solo, um piso térreo e três caves pode ser descrito como: um edifício que possui 25 instâncias de bot:Storey.", + "en" : "A part of the physical world or a virtual world that is inherently both located in this world and having a 3D spatial extent. A bot:Storey is contained in one or more buildings, and is intended to contain one or more spaces that are horizontally connected. Storeys of a building are connected by means of vertical connections such as elevators and stairs. A bot:Storey encompasses both zones above and below ground, for example, a building with 21 floors above ground, one ground floor and 3 basements is equal to the sentence: A building has 25 instances of bot:Storey.", + "it" : "Una parte del mondo fisico o virtuale che si trova intrinsecamente in questo mondo e ha una estensione spaziale tridimensionale. Un bot:Storey è contenuto in uno o più edifici ed è destinato a contenere uno o più spazi che sono connessi orizzontalmente. I piani di un edificio sono connessi attraverso connessioni verticali come ascensori e scale. Un bot:Storey comprende zone che si trovano sia sopra che sotto il livello del suolo; per esempio, un edificio con un piano terra, ulteriori 21 piani di altezza e 3 piani interrati corrisponde a un edificio con 25 istanze di bot:Storey.", + "fr" : "Correspond à un niveau du bâtiment", + "zh-cn" : "本质上是存在于物理世界或虚拟世界的一部分,并具有3D空间范围。bot:Storey包含在一个或多个建筑物中,其旨在包含一个或多个水平连接的空间。 建筑物的楼层通过垂直连接(例如电梯和楼梯)连接。 bot:Storey包含地上和地下两个区域,例如,一栋楼高21层,含有一楼及地下3个地下室的建筑物可以表达为:一栋建筑物有25个bot:Storey实例。", + "es" : "Una parte del mundo físico o virtual que está inherentemente ubicado en este mundo y que tiene una extensión espacial en 3D. Un bot:Storey está contenido en uno o más edificios, y está destinado a contener uno o más espacios que están conectados horizontalmente. Las plantas de un edificio están conectadas por medio de conexiones verticales como ascensores y escaleras. Un bot:Storey abarca ambas zonas sobre y debajo del suelo, por ejemplo, un edificio con 21 pisos sobre el suelo, una planta baja y 3 sótanos debería contener 25 instancias de bot:Storey.", + "cs" : "Část fyzického světa nebo virtuálního světa, která je neodmyslitelně umístěna jak ve fyzickém světě tak má 3D virtuální prostorový rozsah. Bot:Storey je obsažen v jedné nebo vícero budovách a má obsahovat jeden nebo vícero prostorů, které jsou spojeny horizontálně. Podlaží budovy jsou spojeny svislými spoji, jako je například výtahová šachta, nebo schodiště. Bot:Storey zahrnuje jak zóny nad tak pod úrovní terénu, například, prohlášení: budova s 21 nadzemními podlažími, jedním přízemím a 3 podzemními podlažími má stejný význam jako prohlášení: budova má 25 instancí bot:Storey.", + "sk" : "Časť fyzického alebo virtuálneho sveta, ktorá je neodmyslitelne umiestnená ako vo fyzickom svete, tak má 3D virtuálny priestorový rozsah. Bot:Storey je obsiahnutý v jednej alebo viacero budovách a má obsahovať jeden alebo viacero priestorov, ktoré sú spojené horizontálne. Podlažia budovy sú spojené zvislými spojmi, ako je napríklad výťahová šachta, alebo schodisko. Bot:Storey zahŕňa ako zóny nad, tak pod úrovňou terénu, napríklad, prehlásenie: budova s 21 nadzemnými podlažiami, prízemím a 3 podzemnými podlažiami má rovnaký význam ako prehlásenie: budova má 25 inštancií bot:Storey.", + "fa" : "بخشی از دنیای فیزیکی، و یا مجازی که اساساً هم در دنیا وجود دارد و دارای حدود مکانی سه بعدی میباشند. یک bot:Storey در یک یا چند ساختمان قرار میگیرد، و دربرگیرنده‌ی یک یا چند فضا است که به صورت افقی به هم متصل شده اند.nطبقه های یک ساختمان از طریق اتصالات عمودی مانند آسانسور و پله به هم متصل میشوند. یک bot:Storey هر دو منطقه بالا و زیر زمین را پوشش می‎دهد، برای مثال، یک ساختمان با 21 طبقه بالای زمین، یک طبقه همکف و3 طبفه یک ساختمان با 25 عنصر bot:Storey است.n", + "da" : "En del af den fysiske verden eller en virtuel verden, der i sagens natur både er lokaliseret i denne verden og har en 3D rumlig afgrænsning. En bot:Storey er indeholdt i en eller flere bygninger og er beregnet til at indeholde et eller flere rum, der er horisontalt forbundet. Etager i en bygning er forbundet ved hjælp af lodrette forbindelser såsom elevatorer og trapper. En bot:Storey omfatter både zoner over og under jorden, for eksempel en bygning med 21 etager over jorden, en stueetage og 3 kældre er lig med sætningen: En bygning har 25 tilfælde af bot:Storey.", + "ca" : "Una part del món físic o virtual que està inherentment ubicat en aquest món i que té una extensió espacial en 3D. Un bot:Storey està contingut en un o més edificis, i està destinat a contenir un o més espais que estan connectats horitzontalment. Les plantes d'un edifici estan connectades per mitjà de connexions verticals com ascensors i escales. Un bot:Storey abasta les dues zones sobre i sota de terra, per exemple, un edifici amb 21 pisos sobre terra, una planta baixa i 3 soterranis hauria de contenir 25 instàncies de bot:Storey.", + "tr" : "Bir binanın katı", + "nl" : "Een deel van de fysieke wereld of een virtuele wereld dat zowel gelokaliseerd kan worden in deze wereld als een ruimtelijke omvang heeft. Een bot:Storey is deel van één of meerdere gebouwen, en is bedoeld om één of meerdere ruimtes te bevatten die horizontaal geconnecteerd zijn. De verdiepingen van een gebouw zijn verbonden door middel van verticale connecties zoals liften en trappen. Een bot:Storey omvat zowel zones boven als onder de grond, bijvoorbeeld een gebouw met 21 verdiepingen boven de grond, één gelijkvloers en 3 kelderverdiepingen is evenwaardig aan de zin: Een gebouw heeft 25 instanties van bot:Storey." + }, + "id" : "3", + "superClasses" : [ "2" ] + }, { + "iri" : "https://w3id.org/bot#Site", + "baseIri" : "https://w3id.org/bot", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/bot#", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "stable", + "type" : "label" + } ] + }, + "label" : { + "de" : "Grundstück", + "IRI-based" : "Site", + "sv" : "Plats", + "fi" : "Tontti", + "pt" : "Sítio", + "en" : "Site", + "it" : "Sito", + "fr" : "Site", + "zh-cn" : "地点", + "es" : "Sitio", + "cs" : "Staveniště, stavební pozemek, stavební plocha, zastavěná plocha.", + "sk" : "Stavenisko, stavebný pozemok, stavebná plocha, zastavaná plocha.", + "fa" : "سایت", + "da" : "Grund", + "nl" : "Terrein", + "ca" : "Lloc", + "tr" : "Arsa" + }, + "comment" : { + "de" : "Ein Teil der realen oder virtuellen Welt die beide Teil dieser Welt sind und eine räumliche Ausdehnung hat. Es besteht die Absicht, dass es Gebäude enthält, oder es enthält ein oder mehr Gebäude.", + "sv" : "En del av den fysiska världen eller en virtuell värld som har en spatial utsträckning i tre dimensioner. Den är avsedd att innehålla, eller innehåller, en eller flera byggnader.", + "fi" : "Fyysisen tai virtuaalisen maailman osa, joka luonnostaan sekä sijaitsee tässä maailmassa että omaa kolmiulotteiset tilalliset ulottuvuudet. Sen on tarkoitus sisältää tai se sisältää yhden tai useamman rakennuksen.", + "pt" : "Uma parte do mundo físico ou do mundo virtual que está inerentemente localizada neste mundo e que tem uma extensão espacial tridimensional. Contém ou destina-se a conter um ou mais edifícios.", + "en" : "A part of the physical world or a virtual world that is inherently both located in this world and having a 3D spatial extent. It is intended to contain or contains one or more buildings.", + "it" : "Una parte del mondo fisico o virtuale che si trova intrinsecamente in questo mondo e ha una estensione spaziale tridimensionale. Un sito contiene o è destinato a contenere uno o più edifici.", + "fr" : "Un site comprend un ou plusieurs bâtiments", + "zh-cn" : "本质上是存在于物理世界或虚拟世界的一部分,并具有3D空间范围。它旨在包含一个或多个建筑物。", + "es" : "Una parte del mundo físico o un mundo virtual que está inherentemente ubicada en este mundo y que tiene una extensión espacial en 3D. Está destinado a contener o contiene uno o más edificios.", + "cs" : "Staveniště jako část fyzického světa nebo virtuálního světa které jsou neodmyslitelně umístěna jak ve fyzickém světě tak majíce 3D virtuální prostorový rozsah. Záměrem staveniště je obsahovat alespoň jednu stavbu, např. budovu či stavební konstrukci.rn", + "sk" : "Stavenisko ako časť fyzického, alebo virtuálneho sveta, ktoré sú neodmysliteľne umiestnené ako vo fyzickom svete tak majúc 3D virtuálny priestorový rozsah. Zámerom staveniska je obsahovať aspoň jednu stavbu, napríklad budovu, či stavebnú konštrukciu.", + "fa" : "بخشی از دنیای فیزیکی، و یا مجازی که اساساً در دنیا وجود دارد و دارای حدود مکانی سه بعدی است. یک عنصر سایت در برگیرنده‌ی یک یا چند ساختمان است.nn", + "da" : "En del af den fysiske verden eller en virtuel verden, der i sagens natur både er lokaliseret i denne verden og har en 3D rumlig afgrænsning. En byggegrund er beregnet til at indeholde, eller indeholder én eller flere bygninger.", + "tr" : "Bir veya daha fazla bina içeren alan.", + "nl" : "Een deel van de fysieke wereld of een virtuele wereld dat zowel gelokaliseerd kan worden in deze wereld als een ruimtelijke omvang heeft. Het is bedoeld om één of meerdere gebouwen te bevatten of bevat al één of meerdere gebouwen.", + "ca" : "Una part del món físic o un món virtual que es troba inherentment ubicada en aquest món i que té una extensió espacial en 3D. Està destinada a contenir un contingut o més edificis." + }, + "id" : "9", + "superClasses" : [ "2" ] + }, { + "iri" : "http://www.w3.org/2006/vcard/ns#Individual", + "baseIri" : "http://www.w3.org/2006/vcard/ns", + "instances" : 0, + "label" : { + "IRI-based" : "Individual" + }, + "individuals" : [ { + "iri" : "https://orcid.org/0000-0002-6519-7057", + "baseIri" : "https://orcid.org", + "annotations" : { + "name" : [ { + "identifier" : "name", + "language" : "undefined", + "value" : "Mads Holten Rasmussen", + "type" : "label" + } ], + "fn" : [ { + "identifier" : "fn", + "language" : "undefined", + "value" : "Mads Holten Rasmussen", + "type" : "label" + } ] + }, + "labels" : { + "IRI-based" : "0000-0002-6519-7057" + } + }, { + "iri" : "https://orcid.org/0000-0001-8020-4609", + "baseIri" : "https://orcid.org", + "annotations" : { + "fn" : [ { + "identifier" : "fn", + "language" : "undefined", + "value" : "Pieter Pauwels", + "type" : "label" + } ], + "name" : [ { + "identifier" : "name", + "language" : "undefined", + "value" : "Pieter Pauwels", + "type" : "label" + } ] + }, + "labels" : { + "IRI-based" : "0000-0001-8020-4609" + } + }, { + "iri" : "http://maxime-lefrancois.info/me#", + "baseIri" : "http://maxime-lefrancois.info/me", + "annotations" : { + "name" : [ { + "identifier" : "name", + "language" : "undefined", + "value" : "Maxime Lefrançois", + "type" : "label" + } ], + "fn" : [ { + "identifier" : "fn", + "language" : "undefined", + "value" : "Maxime Lefrançois", + "type" : "label" + } ] + }, + "labels" : { } + }, { + "iri" : "https://orcid.org/0000-0002-2033-859X", + "baseIri" : "https://orcid.org", + "annotations" : { + "name" : [ { + "identifier" : "name", + "language" : "undefined", + "value" : "Georg Ferdinand Schneider", + "type" : "label" + } ], + "fn" : [ { + "identifier" : "fn", + "language" : "undefined", + "value" : "Georg Ferdinand Schneider", + "type" : "label" + } ] + }, + "labels" : { + "IRI-based" : "0000-0002-2033-859X" + } + } ], + "attributes" : [ "external" ], + "id" : "21" + }, { + "iri" : "https://w3id.org/bot#Space", + "baseIri" : "https://w3id.org/bot", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/bot#", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "stable", + "type" : "label" + } ] + }, + "label" : { + "de" : "Raum", + "IRI-based" : "Space", + "fi" : "Tila", + "sv" : "Utrymme", + "pt" : "Espaço", + "en" : "Space", + "it" : "Spazio", + "fr" : "Pièce", + "zh-cn" : "空间", + "es" : "Espacio", + "cs" : "Prostor", + "sk" : "Priestor", + "fa" : "فضا", + "da" : "Rum", + "ca" : "Espai", + "tr" : "Oda", + "nl" : "Ruimte" + }, + "comment" : { + "de" : "Ein Teil der realen oder virtuellen Welt, dessen räumliche Ausdehnung tatsächlich oder virtuell begrenzt ist. In der Zone in der es enthalten ist stellt es bestimmte Funktionen bereit.", + "fi" : "Osa fyysisestä -tai virtuaalista maailmasta, jonka 3D-tila on rajattu oikeasti tai teoreettisesti ja tarjoaa tiettyjä toimintoja vyöhykkeellä, johon se sisältyy.", + "sv" : "En del av den fysiska världen eller en virtuell värld vars spatiala utsträckning i tre dimensioner är faktiskt eller teoretiskt begränsad, och som tillhandahåller vissa funktioner för zonen den är inrymd i.", + "pt" : "Uma parte do mundo físico ou de um mundo virtual cuja extensão espacial 3D esteja delimitada de forma efectiva ou teórica, que fornece certas funções dentro da zona em que está contido.", + "en" : "A part of the physical world or a virtual world whose 3D spatial extent is bounded actually or theoretically, and provides for certain functions within the zone it is contained in.", + "it" : "Una parte del mondo fisico o virtuale il cui spazio 3D è delimitato effettivamente o virtualmente, e fornisce determinate funzioni all'interno della zona in cui è contenuta.", + "fr" : "Une partie du monde physique ou virtuel dont l'extension 3D est limitée réellement ou théoriquement, et apporte des fonctions aux zones dans laquelle elle est contenue.", + "zh-cn" : "是物理世界或虚拟世界的一部分,其3D空间范围实际上或在理论上受到限制,可在其所包含的区域内提供某些功能。", + "es" : "Una parte del mundo físico o de un mundo virtual cuya extensión espacial tridimensional está limitada física o teóricamente, y provee ciertas funciones dentro de la zona donde está contenida.", + "cs" : "Ohraničený troj-rozměrný rozsah definovaný fyzicky nebo pojmově [ISO 12006-2 (DIS 2013), 3.4.3]", + "sk" : "Ohraničený troj-rozmerný rozsah definovaný fyzicky nebo pojmovo [ISO 12006-2 (DIS 2013), 3.4.3]", + "fa" : "بخشی از دنیای فیزیکی، و یا مجازی که وسعت مکانی سه بعدی آن از نظر حقیقی و یا تئوری محدود است، و عملکردهای مشخصی را در منطقه‌ای که در آن قرار گرفته ارائه می دهد.n", + "da" : "En del af den fysiske verden eller en virtuel verden, hvis 3D-rumlige omfang er afgrænset faktisk eller teoretisk, og giver bestemte funktioner inden for den zone, den er indeholdt i.", + "ca" : "Una part de el món físic o d'un món virtual l'extensió espacial tridimensional està limitada física o teòricament, i proveeix certes funcions dins de la zona on està continguda.", + "nl" : "Een deel van de fysieke wereld of een virtuele wereld waarvan de driedimensionale omvang feitelijk of virtueel begrensd is, en dat bepaalde activiteiten faciliteert in de zone die de ruimte bevat.", + "tr" : "Fiziksel dünyanın veya sanal dünyanın, 3D mekansal kapsamı gerçekte veya teorik olarak tanımlanmış olan ve içinde bulunduğu bölgede belirli fonksiyonları yerine getiren bir kısmıdır." + }, + "id" : "11", + "superClasses" : [ "2" ] + }, { + "iri" : "http://www.w3.org/2002/07/owl#Thing", + "baseIri" : "http://owl2vowl.de", + "id" : "28", + "label" : { + "undefined" : "Thing" + } + }, { + "iri" : "http://purl.org/vocommons/voaf#Vocabulary", + "baseIri" : "http://purl.org/vocommons/voaf", + "instances" : 0, + "label" : { + "IRI-based" : "Vocabulary" + }, + "individuals" : [ { + "iri" : "https://w3id.org/bot#", + "baseIri" : "https://w3id.org/bot", + "labels" : { } + } ], + "attributes" : [ "external" ], + "id" : "29" + }, { + "iri" : "http://www.w3.org/2002/07/owl#Thing", + "baseIri" : "http://owl2vowl.de", + "id" : "19", + "label" : { + "undefined" : "Thing" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "id" : "17", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "https://schema.org/Person", + "baseIri" : "https://schema.org", + "instances" : 0, + "label" : { + "IRI-based" : "Person" + }, + "individuals" : [ { + "iri" : "https://orcid.org/0000-0002-6519-7057", + "baseIri" : "https://orcid.org", + "annotations" : { + "name" : [ { + "identifier" : "name", + "language" : "undefined", + "value" : "Mads Holten Rasmussen", + "type" : "label" + } ], + "fn" : [ { + "identifier" : "fn", + "language" : "undefined", + "value" : "Mads Holten Rasmussen", + "type" : "label" + } ] + }, + "labels" : { + "IRI-based" : "0000-0002-6519-7057" + } + }, { + "iri" : "https://orcid.org/0000-0001-8020-4609", + "baseIri" : "https://orcid.org", + "annotations" : { + "fn" : [ { + "identifier" : "fn", + "language" : "undefined", + "value" : "Pieter Pauwels", + "type" : "label" + } ], + "name" : [ { + "identifier" : "name", + "language" : "undefined", + "value" : "Pieter Pauwels", + "type" : "label" + } ] + }, + "labels" : { + "IRI-based" : "0000-0001-8020-4609" + } + }, { + "iri" : "http://maxime-lefrancois.info/me#", + "baseIri" : "http://maxime-lefrancois.info/me", + "annotations" : { + "name" : [ { + "identifier" : "name", + "language" : "undefined", + "value" : "Maxime Lefrançois", + "type" : "label" + } ], + "fn" : [ { + "identifier" : "fn", + "language" : "undefined", + "value" : "Maxime Lefrançois", + "type" : "label" + } ] + }, + "labels" : { } + }, { + "iri" : "https://orcid.org/0000-0002-2033-859X", + "baseIri" : "https://orcid.org", + "annotations" : { + "name" : [ { + "identifier" : "name", + "language" : "undefined", + "value" : "Georg Ferdinand Schneider", + "type" : "label" + } ], + "fn" : [ { + "identifier" : "fn", + "language" : "undefined", + "value" : "Georg Ferdinand Schneider", + "type" : "label" + } ] + }, + "labels" : { + "IRI-based" : "0000-0002-2033-859X" + } + } ], + "attributes" : [ "external" ], + "id" : "36" + }, { + "iri" : "http://www.w3.org/2002/07/owl#Thing", + "baseIri" : "http://owl2vowl.de", + "id" : "13", + "label" : { + "undefined" : "Thing" + } + }, { + "iri" : "https://w3id.org/bot#Building", + "baseIri" : "https://w3id.org/bot", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/bot#", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "stable", + "type" : "label" + } ] + }, + "label" : { + "de" : "Gebäude", + "IRI-based" : "Building", + "fi" : "Rakennus", + "sv" : "Byggnad", + "pt" : "Edifício", + "en" : "Building", + "it" : "Edificio", + "fr" : "Bâtiment", + "zh-cn" : "建筑", + "es" : "Edificio", + "cs" : "Budova", + "sk" : "Budova", + "fa" : "ساختمان", + "da" : "Bygning", + "tr" : "Bina", + "nl" : "Gebouw", + "ca" : "Edifici" + }, + "comment" : { + "de" : "Eine eigenständige Einheit der bebauten Umgebung mit einer charakteristischen räumlichen Struktur. Es besteht die Absicht das es eine Funktion oder Nutzung erlaubt [ISO 12006-2:2013]. Ein bot:Building ist Teil der realen und virtuellen Welt und hat eine räumliche Ausdehnung. Es ist enthalten in einem Grundstück und kann ein oder mehrere Stockwerke enthalten, die vertical miteinander verbunden sind.", + "sv" : "En oberoende enhet i den byggda miljön med en karaktäristisk rumslig struktur som stödjer minst en funktion eller användaraktivitet. [ISO 12006-2:2013]. En bot:Building är en del av den fysiska världen eller en virtuell värld som har en spatial utsträckning i tre dimensioner, ligger på en plats, och kan ha en eller flera vertikalt förbundna våningar.", + "fi" : "Rakennetun ympäristön itsenäinen osa, jolla on ominainen avaruudellinen rakenne, ja joka on tarkoitettu palvelemaan ainakin yhtä funktiota tai käyttäjäaktiviteettia [ISO 12006-2:2013]. bot:Building on fyysisen tai virtuaalisen maailman osa, joka luonnostaan sekä sijaitsee tässä maailmassa että omaa kolmiulotteiset tilalliset ulottuvuudet, sijaitsee tontilla, ja se voi sisältää yhden tai useamman kerroksen jotka ovat pystysuunnassa yhteydessä.", + "pt" : "Uma unidade independente do ambiente construído com uma estrutura espacial característica, destinada a servir pelo menos uma função do utilizador [ISO 12006-2:2013].nUm bot:Building é uma parte do mundo físico ou do mundo virtual que está inerentemente localizado neste mundo e que tem uma extensão espacial tridimensional, que está contido num sítio de construção e que contém um ou mais pisos que estão conectados verticalmente.", + "en" : "An independent unit of the built environment with a characteristic spatial structure, intended to serve at least one function or user activity [ISO 12006-2:2013]. A bot:Building is a part of the physical world or a virtual world that is inherently both located in this world and having a 3D spatial extent, is contained in a building site, and can contain one or more storeys that are vertically connected.", + "it" : "Un'unità indipendente dell'ambiente costruito con una struttura spaziale caratteristica, destinato a servire almeno una funzione o attività degli utenti [ISO 12006-2:2013]. Un bot:Building è parte del mondo fisico o virtuale che si trova intrinsecamente in questo mondo e ha una estensione spaziale tridimensionale, è contenuto in un sito e può contenere uno o più piani che sono connessi verticalmente.", + "fr" : "Une unité indépendante de l'environnement bâti avec une structure spatiale caractéristique, conçue pour répondre à une fonction ou une activité de l'utilisateur [ISO 12006-2:2013]", + "zh-cn" : "具有特定空间结构的建筑环境独立单元,旨在服务至少一种功能或用户活动[ISO 12006-2:2013]。 bot:Building是物理或虚拟世界的一部分,其既存在于其中,又具有3D空间范围。bot:Building包含在建筑工地中,并且可以包含一个或多个垂直连接的楼层。", + "es" : "Unidad independiente del entorno construido con una estructura espacial característica, destinada a servir al menos una función o actividad del usuario [ISO 12006-2: 2013]. Un bot:Building es tanto una parte del mundo físico o virtual que se encuentra inherentemente situado en este mundo y que tiene una extensión espacial 3D, se encuentra en un emplazamiento de edificación, y puede contener uno o más pisos conectados verticalmente.", + "cs" : "Nezávislá jednotka v (stavebním) prostředí či veřejném prostoru, s charakteristickou prostorovou strukturou a formou, která má sloužit alespoň pro jednu činnost nebo funkci uživatele [ISO 12006-2: 2013]. nBot:Building je součástí fyzického nebo virtuálního světa, který je neodmyslitelně umístěn jak ve fyzickém světě, tak má 3D virtuální prostorový rozsah, je umístěn na staveništi (\"Site\") a může obsahovat jedno nebo víc podlaží, která jsou vertikálně propojena. ", + "sk" : "Nezávislá jednotka v (stavebnom) prostredí či verejnom priestore, s charakteristickou priestorovou štruktúrou a formou, ktorá má slúžiť aspoň pre jednu činnosť alebo funkciu uživateľa [ISO 12006-2:2013]. Bot:Building je súčasťou fyzického alebo virtuálneho sveta, ktorý je neodmyslitelnľ umiestnľný ako vo fyzickom svete, tak má 3D virtuálny priestorový rozsah, je umiestnený na stavenisku (\"Site\") a môže obsahovať jedno alebo viac podlaží, ktoré sú vertikálne prepojené. ", + "fa" : "یک واحد مستقل با ساختار مکانی مشخص از محیط ساخت وساز، که برای ارایه‌ی حداقل یک عملکرد یا فعالیت کاربری در نظرگرفته شده است [ISO 12006-2:2013]. یک bot:Building یک بخش از دنیای فیزیکی یا یک دنیای مجازی است که اساسا در این دنیا قرار دارد و دارای حدود مکانی سه بعدی است، دریک سایت ساختمان قرار گرفته ، و میتواند دربرگیرنده‌ی یک یا چند طبقه باشد که به صورت عمودی به هم متصل شده اند.", + "da" : "En uafhængig enhed i det bebyggede miljø med en karakteristisk rumlig struktur, beregnet til at betjene mindst en funktion eller brugeraktivitet [ISO 12006-2: 2013]. En bot:Building er en del af den fysiske verden eller en virtuel verden, der i sagens natur både er lokaliseret i denne verden og har en 3D rumlig afgrænsning, er indeholdt på et byggefelt og kan indeholde en eller flere etager, der er lodret forbundet.", + "nl" : "Een onafhankelijke entiteit met een ruimtelijke structuur die onderdeel is van de gebouwde omgeving, en bedoeld is om minimaal één functie of gebruikersactiviteit te bedienen [ISO 12006-2:2013]. Een bot:Building is deel van de fysieke wereld of een virtuele wereld dat zowel gelokaliseerd kan worden in deze wereld als een ruimtelijke omvang heeft, is deel van een gebouwsite, en kan één of meerder verdiepingen bevatten die verticaal verbonden zijn.", + "ca" : "Unitat independent de l’entorn construït amb una estructura espacial característica, destinada a servir almenys una funció o activitat de l’usuari [ISO 12006-2: 2013]. Un bot:Building és tant una part del món físic o virtual que es troba inherentment situat en aquest món i que té una extensió espacial 3D, es troba en un emplaçament d’edificació, i pot contenir un o més pisos connectats verticalment.", + "tr" : "Bir yapılı ortamına sahip, ve karakteri mekansal olan ve en az bir funksiyona veya kullanıcı etkinligini desteleyen bir bağımsız parcadir. " + }, + "id" : "24", + "superClasses" : [ "2" ] + }, { + "iri" : "https://w3id.org/bot#Element", + "baseIri" : "https://w3id.org/bot", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/bot#", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "stable", + "type" : "label" + } ] + }, + "label" : { + "de" : "Bauteil (Bauwesen)", + "IRI-based" : "Element", + "sv" : "Byggdel", + "fi" : "Elementti", + "pt" : "Elemento arquitectónico", + "en" : "Building element", + "it" : "Elemento di costruzione", + "fr" : "Élément d'un bâtiment", + "zh-cn" : "构件", + "es" : "Elemento de construcción", + "cs" : "Stavební prvek", + "sk" : "Stavebný prvok", + "fa" : "المان", + "da" : "Bygningsdel", + "nl" : "Gebouwelement", + "ca" : "Element de construcció", + "tr" : "Bina elemanı" + }, + "comment" : { + "de" : "Das Bauteil ist im Bauwesen ein einzelnes Teil, ein Element oder eine Komponente, aus denen ein Bauwerk zusammengesetzt wird [ISO 12006-2:2015, 3.4.7]", + "fi" : "Rakennetun kokonaisuuden osa, jolla on ominainen tekninen funktio, muoto tai sijainti [ISO 12006-2:2015, 3.4.7]", + "sv" : "Beståndsdel av ett byggnadsverk med en karaktäristisk teknisk funktion, form eller position [ISO 12006-2:2015, 3.4.7]", + "pt" : "Constituinte de uma entidade de construção com uma função técnica característica, forma ou posição [ISO 12006-2:2015, 3.4.7]", + "en" : "Constituent of a construction entity with a characteristic technical function, form or position [ISO 12006-2:2015, 3.4.7]", + "it" : "Costituente di una entità costruttiva con una funzione tecnica caratteristica, forma o posizione [ISO 12006-2:2015, 3.4.7]", + "fr" : "Constituant d'un bâtiment remplissant une fonction technique spécifique ou ayant une forme ou une position spécifiques [ISO 12006-2:2015, 3.4.7]", + "zh-cn" : "具有特定技术功能,形式或位置的建筑实体组成部分", + "es" : "Constituyente de una entidad de construcción con una función técnica característica, forma o posición [ISO 12006-2:2015, 3.4.7]", + "cs" : "Součást stavební entity s charakteristickou technickou funkcí, formou, nebo umístěním [ISO 12006-2, 3.4.7]", + "sk" : "Súčasť stavebnej entity s charakteristickou funkciou, formou, alebo umestením [ISO 12006-2, 3.4.7]", + "fa" : "تشکیل دهنده‌ی یک واحد ساخت با عملکرد فنی، فرم و یا موقعیت مشخص.", + "da" : "Bestanddel af et bygværk med en karakteristisk funktion, form eller position [ISO 12006-2:2015, 3.4.7]", + "nl" : "Bestanddeel van een gebouwde entiteit met een karakteristieke technische functie, vorm of positie [ISO 12006-2:2015, 3.4.7]", + "tr" : "\"Karakteristik fonksiyonu, şekli veya konumu olan bir binanın bileşeni [ISO 12006-2: 2015, 3.4.7]", + "ca" : "Constituent d'una entitat de construcció amb una funció tècnica característica, forma o posició [ISO 12006-2:2015, 3.4.7]" + }, + "id" : "6" + }, { + "iri" : "https://w3id.org/bot#Zone", + "baseIri" : "https://w3id.org/bot", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/bot#", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "stable", + "type" : "label" + } ] + }, + "label" : { + "de" : "Zone", + "IRI-based" : "Zone", + "sv" : "Zon", + "fi" : "Vyöhyke", + "pt" : "Zona", + "en" : "Zone", + "it" : "Zona", + "fr" : "Zone", + "zh-cn" : "区域", + "es" : "Zona", + "cs" : "Zóna", + "sk" : "Zóna", + "fa" : "منطقه", + "da" : "Zone", + "nl" : "Zone", + "ca" : "Zona", + "tr" : "Bölge" + }, + "subClasses" : [ "11", "24", "3", "9" ], + "comment" : { + "de" : "Ein Teil der realen oder virtuellen Welt die beide Teil dieser Welt sind und eine räumliche Ausdehnung hat; Unterklassen von bot:Zone sind bot:Site, bot:Building, bot:Storey oder bot:Space. Eine Instanz von bot:Zone kann andere Instanzen von bot:Zone enthalten. So ist es möglich Instanzen von bot:Zone zu gruppieren, oder zu unterteilen. Eine Instanz einer bot:Zone kann an eine andere Instanz von bot:Zone angrenzen. Es bestehen drei Möglichkeiten Instanzen von bot:Zone und bot:Element in Beziehung zu setzen. Entweder ein Element ist in einer Zone enthalten (bot:containsElement), es grenzt an eine andere Zone an (bot:adjacentElement) oder es schneidet eine Zone (bot:intersectingElement).", + "fi" : "Fyysisen tai virtuaalisen maailman osa, joka luonnostaan sekä sijaitsee tässä maailmassa että omaa kolmiulotteiset tilalliset ulottuvuudet; bot:Zone:n alaluokkia ovat: bot:Site, bot:Building, bot:Storey ja bot:Space. bot:Zone-luokan instanssi voi sisältää muita bot:Zone-instansseja, mikä mahdollistaa vyöhykkeiden ryhmittelyn ja jaon osiin. bot:Zone voi olla muiden bot:Zone-instanssien vieressä tai leikata niitä. Lopuksi, bot:Zone voi instantioida kolmea relaatiota bot:Element:iin, jotka joko sisältyvät siihen (bot:containsElement), ovat sen veiressä (bot:adjacentElement) tai leikkaavat sitä (bot:intersectingElement).", + "sv" : "En del av den fysiska världen eller en virtuell värld som har en spatial utsträckning i tre dimensioner. Underklasser av bot:Zone inkluderar bot:Site, Bot:Building, bot:Storey, och bot:Space. En instans av bot:Zone kan innehålla andra bot:Zone-instanser, vilket gör det möjligt att gruppera eller dela upp zoner. En instans av bot:Zone kan kan ligga angränsande mot andra bot:Zone-instanser. Slutligen kan en instans av bot:Zone ha två relationer till instanser av bot:Element; den kan innehålla dem (bot:containsElement) eller ligga angränsande mot dem (bot:adjacentElement).nnnn", + "pt" : "Uma parte do mundo físico ou de um mundo virtual que está inerentemente localizado neste mundo e que possui uma extensão espacial 3D. As Sub-classes de bot:Zone incluem bot:Site, bot:Building, bot:Storey ou bot:Space. Uma instância de bot:Zone pode conter outras instâncias de bot:Zone, tornando possível agrupar ou subdividir zonas. Uma instância de bot:Zone pode ser adjacente a ou intersectar outras instâncias de bot:Zone. Por fim, uma bot:Zone pode instanciar três relações com bot:Element, que ou estão contidas em (bot:containsElement), lhe são adjacentes (bot:adjacentElement) ou as intersecta (bot:intersectingElement).", + "en" : "A part of the physical world or a virtual world that is inherently both located in this world and has a 3D spatial extent; Sub-classes of bot:Zone include bot:Site, bot:Building, bot:Storey, or bot:Space. An instance of bot:Zone can contain other bot:Zone instances, making it possible to group or subdivide zones. An instance of bot:Zone can be adjacent to or intersecting other bot:Zone instances. Finally, a bot:Zone can instantiate three relations to bot:Element, which are either contained in (bot:containsElement), adjacent to it (bot:adjacentElement) or intersecting (bot:intersectingElement).", + "it" : "Una parte del mondo fisico o virtuale che è intrinsecamente ubicato in questo mondo e che ha un'estensione spaziale tridimensionale; sottoclassi di bot:Zone includono bot:Site, bot:Building, bot:Storey, o bot:Space. Un'istanza di bot:Zone può contenere altre istanze di bot:Zone, rendendo possibile il raggruppamento o la suddivisione di zone. Un'istanza di bot:Zone può essere adiacente o intersecare altre istanze di bot:Zone. Infine, una bot:Zone può istanziare tre relazioni con bot:Element, il quale può essere contenuto (bot:containsElement), essere adiacente (bot:adjacentElement) o intersecare (bot:intersectingElement).", + "fr" : "Une partie du monde physique ou virtuel qui est inhéremment à la fois localisé dans ce monde et a une étendue spatiale 3D; les sous-classes de bot:Zone incluent bot:Site, bot:Building, bot:Storey, ou bot:Space. Une instance de bot:Zone peut contenir d'autres instances de bot:Zone, ce qui permet de grouper ou sub-diviser les zones. Une instance de bot:Zone peut être adjacente ou intersectante à d'autres bot:Zone. Enfin, une bot:Zone peut contenir (bot:containsElement), être adjacent (bot:adjacentElement) ou intersecter (bot:intersectingElement) un bot:Element.", + "zh-cn" : "区域是物理世界或虚拟世界的一部分,既位于现实空间中又可在3D空间中拓展。bot:Zone的子集包括bot:Site, bot:Building, bot:Storey, or bot:Space。bot:Zone实例可包含其他bot:Zone实例,从而可以对区域进行分组或细分。 同时,bot:Zone的实例也可以与其他bot:Zone实例相邻。最后,bot:Zone可以实例化为bot:Element的两个关系,它们可以包含在(bot:containsElement)中,或者与其相邻(bot:adjacentElement)。", + "es" : "Una parte del mundo físico o de un mundo virtual que está inherentemente ubicada en este mundo y que tiene una extensión espacial tridimensional; las subclases de bot:Zone incluyen bot:Site, bot:Building, bot:Storey, o bot:Space. Una instancia de bot:Zone puede contener otras instancias de bot:Zone, lo que permite agrupar o subdividir zonas. Una instancia de bot:Zone puede ser adyacente a, o intersecar con otras instancias de bot:Zone. Finalmente, una bot:Zone puede instanciar tres relaciones con bot:Element, que están contenidas en ella (bot:containsElement), adyacentes a ella (bot:adjacentElement) o con los que interseca (bot:intersectingElement).", + "cs" : "Část fyzického nebo virtuálního světa, který je dědičně v tomto světe umístěn a má charakter-rozměr prostoru který závisí na lokalizaci jak v reálnem světě, tak ve virtuálním světě. Podtřídy bot:Zone zahrňují bot:Site, bot:Building, bot:Storey, nebo bot:Space. Instance zóny bot:Zone jsou schopny obsahovat další bot:Zone instance se schopností je seskupovat nebo dělit na nižší zóny. Instance bot:Zone může být přiřazena-dotčena k další bot:Zone instanci. Nakonec bot:Zone může definovat dva vztahy elemetntu bot:Element, které jsou buďto obsaženy v zóně (bot:containsElement), nebo se jí dotýkají (bot:adjacentElement)", + "sk" : "Časť fyzického alebo virtuálneho sveta, ktorý je dedične v tomto svete umiestnený a má charakter-rozmer priestoru, ktorý závisí na lokalizácii ako v tomto svete tak vo virtuálnomn svete. Podtriedy bot:Zone zahŕňajú bot:Site, bot:Building, bot:Storey, alebo bot:Space. Inštancia bot:Zone je schopná obsahovať iné bot:Zone inštancie, so schopnosťou zoskupovať alebo pod-rozdeľovať zóny. Inštancia bot:Zone môže byť dotýkajúca sa ďalšej bot:Zone inštancie. Finálne, bot:Zone môže definovať vzťahy k bot:Element, ktoré môžu byť typu zóna obsahuje prvok (bot:containsElement), alebo sa prvok môže zóny dotýkať (bot:adjacentElement).", + "fa" : "بخشی از دنیای فیزیکی، و یا مجازی که اساساً در دنیا وجود دارد و دارای حدود مکانی سه بعدی است. زیرکلاس‌های bot:Zone عبارتند از bot:Site، bot:Building، bot:Storey، وbot:Space.n یک عنصر bot:Zone میتواند دربرگیرنده‌ی عناصر دیگری از جنس bot:Zone باشد و به این گونه امکان گروه بندی و جداسازی مناطق ختلف بوجود می‌آید. یک عنصر bot:Zone می‌تواند هم‌جوار عناصر دیگری از جنس bot:Zone باشد. در پایان، یک عنصر bot:Zone می‌تواند آغازگر دو نوع رابطه با عناصر bot:Element باشد که شامل دربرگیرندگی (bot:containsElement) وهم‌جواری (bot:adjacentElement) است.n", + "da" : "En del af den fysiske verden eller en virtuel verden, der i sagens natur både er lokaliseret i denne verden og har en 3D rumlig afgrænsning; Underklasser af bot:Zone inkluderer bot:Site, bot:Building, bot:Storey eller bot:Space. En forekomst af bot:Zone kan indeholde andre bot:Zone-forekomster, hvilket gør det muligt at gruppere eller opdele zoner. En forekomst af bot:Zone kan støde op til andre bot:Zone-forekomster. Endelig kan en bot:Zone-forekomst instantiere to forbindelser til bot:Element, der enten er indeholdt i (bot:containsElement) eller tilstødende dertil (bot:adjacentElement).", + "ca" : "Una part de el món físic o d'un món virtual que està inherentment ubicat en aquest món i que té una extensió espacial tridimensional; les subclasses de bot:Zone inclouen bot:Site, bot:Building, bot:Storey, o bot:Space. Una instància de bot:Zone pot contenir altres instàncies de bot:Zone, fent possible agrupar o subdividir zones. Una instància de bot:Zone pot ser adjacent a, o intersecar amb altres instàncies de bot:Zone. Finalment, un bot:Zone pot instanciar tres relacions amb bot:Element, que estan continguts en ella (bot:containsElement), són adjacents a ella (bot:adjacentElement), o amb els que interseca (bot:intersectingElement).", + "nl" : "Een deel van de fysieke wereld of een virtuele wereld dat zowel gelokaliseerd kan worden in deze wereld als een ruimtelijke omvang heeft; subklasses van bot:Zone zijn bot:Site, bot:Building, bot:Storey of bot:Space. Een instantie van bot:Zone kan een ander bot:Zone instantie bevatten, wat gebruikt kan worden om zones te groeperen of op te delen. Een instantie van bot:Zone kan aangrenzend zijn aan of snijdend met een andere bot:Zone instantie. Ten slotte kan een bot:Zone instantie drie relaties hebben met een bot:Element instantie dat het ofwel bevat (bot:containsElement), waar het aangrenzend aan is (bot:adjacentElement) of waarmee het snijdt (bot:intersectingElement).", + "tr" : "Fiziksel dünyanın veya sanal dünyanın, doğası gereği, hem bu dünyada bulunan ve hem de 3D bölgesel bir sınırlamaya sahip olan bir parça; Bot:Zone altsınıfları: bot:Site, bot:Building, bot:Storey yada bot:Space. Bir bot:Zone baska bot:Zone-olusumu icerebilir. Bir bot:Zone baska bot:Zone-olusumuyla bitisik olabilir. Son onlarak, bir bot:Zone, bir bot:Element ile iki baglantisi olabilir: ya içerir (bot: includeElement) veya bitisik olur (bot: adjacentElement)." + }, + "id" : "2" + } ], + "property" : [ { + "id" : "1", + "type" : "owl:objectProperty" + }, { + "id" : "5", + "type" : "owl:objectProperty" + }, { + "id" : "7", + "type" : "owl:objectProperty" + }, { + "id" : "8", + "type" : "owl:objectProperty" + }, { + "id" : "10", + "type" : "owl:objectProperty" + }, { + "id" : "12", + "type" : "owl:objectProperty" + }, { + "id" : "15", + "type" : "owl:objectProperty" + }, { + "id" : "16", + "type" : "owl:datatypeProperty" + }, { + "id" : "18", + "type" : "owl:objectProperty" + }, { + "id" : "20", + "type" : "owl:objectProperty" + }, { + "id" : "22", + "type" : "owl:objectProperty" + }, { + "id" : "23", + "type" : "rdfs:SubClassOf" + }, { + "id" : "25", + "type" : "rdfs:SubClassOf" + }, { + "id" : "26", + "type" : "rdfs:SubClassOf" + }, { + "id" : "27", + "type" : "rdfs:SubClassOf" + }, { + "id" : "30", + "type" : "owl:disjointWith" + }, { + "id" : "31", + "type" : "owl:disjointWith" + }, { + "id" : "32", + "type" : "owl:disjointWith" + }, { + "id" : "33", + "type" : "owl:disjointWith" + }, { + "id" : "34", + "type" : "owl:disjointWith" + }, { + "id" : "35", + "type" : "owl:disjointWith" + }, { + "id" : "37", + "type" : "owl:disjointWith" + }, { + "id" : "38", + "type" : "owl:objectProperty" + }, { + "id" : "39", + "type" : "owl:disjointWith" + }, { + "id" : "40", + "type" : "owl:disjointWith" + }, { + "id" : "41", + "type" : "owl:objectProperty" + }, { + "id" : "4", + "type" : "owl:objectProperty" + }, { + "id" : "14", + "type" : "owl:objectProperty" + }, { + "id" : "43", + "type" : "owl:objectProperty" + }, { + "id" : "42", + "type" : "owl:objectProperty" + } ], + "propertyAttribute" : [ { + "iri" : "https://w3id.org/bot#hasStorey", + "baseIri" : "https://w3id.org/bot", + "range" : "3", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/bot#", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "stable", + "type" : "label" + } ], + "domainIncludes" : [ { + "identifier" : "domainIncludes", + "language" : "undefined", + "value" : "https://w3id.org/bot#Building", + "type" : "iri" + } ] + }, + "label" : { + "de" : "hat Geschoss", + "IRI-based" : "hasStorey", + "fi" : "omaa kerroksen", + "sv" : "har våning", + "pt" : "tem piso", + "en" : "has storey", + "it" : "ha piano", + "fr" : "a étage", + "zh-cn" : "包含楼层", + "es" : "tiene piso", + "cs" : "má podlaží", + "sk" : "má podlažie", + "fa" : "طبقه دارد", + "da" : "har etage", + "nl" : "heeft verdieping", + "ca" : "té pis", + "tr" : "Katı var" + }, + "superproperty" : [ "4" ], + "domain" : "2", + "comment" : { + "de" : "Beziehung zwischen Geschossen, die in einer Zone enthalten sind. Oft ist die rdfs:domain eine Instanz von bot:Building.", + "sv" : "Relation som uttrycker vilka våningar som finns i en Zon. Används typiskt med instanser av bot:Building.", + "fi" : "Suhde vyöhykkeeseen kuuluviin kerroksiin. Tyypillinen lähtöjoukko on luokan bot:Building instanssit.", + "pt" : "Relação com os pisos contidos numa zona. Os domínios típicos de bot:hasStorey são instâncias de bot:Building.", + "en" : "Relation to storeys contained in a zone. The typical domains of bot:hasStorey are instances of bot:Building.", + "it" : "Relazione con i piani contenuti in una zona. Il tipico dominio di bot:hasStorey è bot:Building.", + "fr" : "Relation à définir entre les étages d'une même zone. Cette propriété s'applique typiquement sur des instances de bot:Building.", + "zh-cn" : "区域中含有楼层的关系。 bot:hasStorey的典型使用范围是bot:Building中的实例。", + "es" : "Relación con los pisos contenidos en una zona. Los dominios típicos de bot:hasStorey son instancias de bot:Building.", + "cs" : "Vztah zóny-podlaží a zóny, ve které se nachází. Typická doména bot:hasStorey jsou instance bot:Building.", + "sk" : "Vzťah zóny-podlažia a zóny, v ktorej sa nachádza. Typická doména bot:hasStorey sú inštancie bot:Building.", + "fa" : "ارتباط با طبقه‌هایی که دربرگرفته شده‌اند. دامنه‌ی اصلی bot:hasStorey عنصرهایی از جنس bot:Building هستند.", + "da" : "Relation til etager indeholdt i en zone. De typiske domæner for bot:hasStorey er forekomster af bot:Building.", + "ca" : "Relació amb els pisos continguts en una zona. Els dominis típics de bot: hasStorey son instàncies de bot:Building.", + "tr" : "Bir bölgede bulunan katlarla ilişkisi. Bot:hasStorey için tipik etki alanları bot:Building örnekleridir.", + "nl" : "Relatie tot de verdiepingen die zich in een zone bevinden. De typische domeinen van bot:hasStorey zijn instanties van bot:Building." + }, + "attributes" : [ "object" ], + "id" : "1" + }, { + "iri" : "https://w3id.org/bot#hasSubElement", + "baseIri" : "https://w3id.org/bot", + "range" : "6", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/bot#", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "stable", + "type" : "label" + } ] + }, + "label" : { + "de" : "hat Unterbauteil", + "IRI-based" : "hasSubElement", + "fi" : "omaa osaelementin", + "sv" : "värd för sub element", + "pt" : "tem sub elemento", + "en" : "has sub-element", + "it" : "ha sotto-elemento", + "fr" : "a sous-élément", + "zh-cn" : "包含子构件", + "es" : "alberga sub elemento", + "cs" : "má součást", + "sk" : "má súčasť", + "fa" : "زیرالمان دارد", + "da" : "har underbygningsdel", + "ca" : "té un subelement", + "nl" : "heeft subelement", + "tr" : "alt öğesi var" + }, + "domain" : "6", + "comment" : { + "de" : "Beziehung zwischen zwei Bauteilen, wobei entweder eines das andere enthält (z.B. eine Wand enthält ein Fenster) oder ein ganzes, das aus anderen Teilen zusammen gesetzt ist (z.B. eine Lüftungsanlage hat eine Komponente Lüfter).", + "fi" : "Suhde kahden elementin välillä, joko yhdestä elementistä siihen asennettuun toiseen elementtiin (esimerkiksi seinään asennettu ikkuna) tai elementin osittelu pienempiin osiin (esimerkiksi ilmankäsittelykonella on osana puhallin).", + "sv" : "Relation mellan två byggdelar där antingen endera är monterad i den andra (t.ex. ett fönster som är monterat i en vägg) eller endera är del av den andra (t.ex. en fläkt som är del av ett ventilationsaggregat).", + "pt" : "Relação entre dois elementos arquitectónicos, quer seja um elemento contendo outro (p.e. uma parede aloja uma janela) ou a subcomposição de um elemento arquitectónico por partes menores (p.e. uma unidade de ventilação contém uma parte que é um ventilador).", + "en" : "Relation between two building elements, either one element hosting another (e.g. a wall hosts a window) or a subcomposition of a building element into smaller parts (e.g. an air handling unit has as a part a fan).", + "it" : "Relazione tra due elementi di costruzione che può realizzarsi perché un elemento ne ospita un altro (es. un muro ospita una finestra) o la scomposizione di un elemento in parti più piccole (es. un'unità di trattamento aria ha un ventilatore come sua parte).", + "fr" : "Relation entre deux éléments du bâti, soit un élément hébergeant un autre (ex., un mur héberge une fenêtre), ou une décomposition d'un élément en sous-parties (ex., un système de gestion de l'air et un ventilateur qu'il contient)", + "zh-cn" : "两个建筑构件之间的关系,要么是一个元素承载另一个元素(例如,一扇窗户由墙壁承载),要么是将建筑构件细分为较小的部分(例如,作为空气处理单元一部分的风扇)。", + "es" : "Relación entre dos elementos de construcción, ya sea un elemento que aloja a otro (por ejemplo, una ventana alojada en una pared) o una subcomposición de un elemento de construcción en partes más pequeñas (por ejemplo, una unidad de ventilación tiene una parte que es un ventilador).", + "cs" : "Vztah mezi prvkem a) a dalším prvkem b), který je součástí prvku a)", + "sk" : "Vzťah medzi prvkom a) a ďalším prvkom b), ktorý je súčasťou prvku a)", + "fa" : "ارتباط بین دو المان ساختمان؛ یا رابطه یک المان میزبان با المان دیگر (برای مثال یک پنجره میزبانی میشود توسط یک دیوار)؛ یا رابطه یک المان با زیرمجموعه‌ای از المانهای کوچکتر ساختمان (برای مثال یک فن به عنوان بخشی از واحد کنترل هوا).", + "da" : "Relation mellem to bygningsdele, enten en bygningsdel, der er \"hostet\" af en anden (fx et vindue, der \"hostet\" af en væg) eller en underkomposition af en bygningsdel i mindre dele (fx en ventilator som en del af et ventilationsaggregat).", + "nl" : "Relatie tussen twee gebouwelementen, ofwel één element dat een andere element bevat (bv. een muur die een raam bevat) of een subcompositie van een gebouwelement in kleinere delen (bv. een luchtbehandelingskast die een ventilator bevat).", + "tr" : "Bir a) bina parçası ve b) bina parçası arasındaki bağlantının a) tarafından barındırmasıdır. Örneğin: inst:wall bot:hasSubElement inst:window.", + "ca" : "Relació entre dos elements de construcció, ja sigui un element que allotja un altre (per exemple, una mur que conté una finestra) o una subcomposició d'un element de construcció en parts més petites (per exemple, una unitat de ventilació té una part que és un ventilador)." + }, + "attributes" : [ "object" ], + "id" : "5" + }, { + "iri" : "https://w3id.org/bot#intersectsZone", + "baseIri" : "https://w3id.org/bot", + "range" : "2", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/bot#", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "stable", + "type" : "label" + } ], + "rangeIncludes" : [ { + "identifier" : "rangeIncludes", + "language" : "undefined", + "value" : "https://w3id.org/bot#Space", + "type" : "iri" + }, { + "identifier" : "rangeIncludes", + "language" : "undefined", + "value" : "https://w3id.org/bot#Building", + "type" : "iri" + }, { + "identifier" : "rangeIncludes", + "language" : "undefined", + "value" : "https://w3id.org/bot#Site", + "type" : "iri" + }, { + "identifier" : "rangeIncludes", + "language" : "undefined", + "value" : "https://w3id.org/bot#Storey", + "type" : "iri" + } ], + "domainIncludes" : [ { + "identifier" : "domainIncludes", + "language" : "undefined", + "value" : "https://w3id.org/bot#Storey", + "type" : "iri" + }, { + "identifier" : "domainIncludes", + "language" : "undefined", + "value" : "https://w3id.org/bot#Site", + "type" : "iri" + }, { + "identifier" : "domainIncludes", + "language" : "undefined", + "value" : "https://w3id.org/bot#Building", + "type" : "iri" + }, { + "identifier" : "domainIncludes", + "language" : "undefined", + "value" : "https://w3id.org/bot#Space", + "type" : "iri" + } ] + }, + "label" : { + "de" : "sich schneidende Zone", + "IRI-based" : "intersectsZone", + "fi" : "leikkaa vyöhykettä", + "sv" : "skär zon", + "pt" : "intersecta zona", + "en" : "intersects zone", + "it" : "interseca zona", + "fr" : "intersecte zone", + "zh-cn" : "相交区域", + "es" : "interseca con zona", + "cs" : "protíná zónu", + "sk" : "pretína zónu", + "fa" : "منطقه متلاقی", + "da" : "skærer zone", + "tr" : "Bölge ile temas", + "nl" : "snijdt door zone", + "ca" : "interseca amb zona" + }, + "domain" : "2", + "comment" : { + "de" : "Beziehung zwischen zwei Zonen, die sich schneiden. Zum Beispiel schneidet eine Treppe verschiedene Geschosse.", + "sv" : "Relationen mellan två zoner vars tredimensionella utsträckning korsar varandra. Till exempel, ett trapphus som skär igenom flera våningar.", + "fi" : "Suhde kahden vyöhykkeen välillä, jotka leikkaavat toisiaan. Esimerkiksi rappuset leikkaavat useita kerroksia.", + "pt" : "Relação entre duas zonas cuja extensão tridimensional se intersecta. Por exemplo, uma caixa de escadas intersecta vários pisos.", + "en" : "Relationship between two zones whose 3D extent intersect. For example, a stairwell intersects different storeys.", + "it" : "Relazione tra due zone le cui estensioni 3D si intersecano. Per esempio, una tromba delle scale interseca vari piani.", + "fr" : "Relation entre deux zones dont l'étendue 3D se croise. Par exemple, une cage d'escalier croise différents étages.", + "zh-cn" : "两个区域之间三维空间相交的关系。 例如,楼梯间与不同楼层的相交", + "es" : "Relación entre dos zonas cuya extensión hace que una interseccione con la otra. Por ejemplo, una escalera cruza diferentes pisos.", + "cs" : "Vztah dvou zón, které se protínají svým prostorovým ohraničením. Na příklad, eskalátor protíná vícero podlažních zón.", + "sk" : "Vzťach dvoch zón, ktoré sa pretínajú svojim priestorovým rozhraním. Príkladom môže byť eskalátor prestupujúci cez vac zón-podlaží.", + "fa" : "رابطه بین دو منطقه که حدود سه بعدی آنها با هم تلاقی دارد. برای مثال، یک راه پله از منطقه های مختلف عبور می کند و با آنها تلاقی دارد.", + "da" : "Forholdet mellem to zoner, hvis 3D-omfang skærer hinanden. For eksempel skærer et trappehus forskellige etager.", + "tr" : "3D kapsamı kesişen iki bölge arasındaki ilişki. Örneğin, bir merdiven boşluğu farklı katlarla kesişir.", + "nl" : "Een relatie tussen twee zones waarvan de driedimensionale omvang doorsnijdend is. Bijvoorbeeld een traphal die verschillende verdiepingen doorsnijdt.", + "ca" : "Relació entre dues zones l'extensió fa que una interseccioni amb l'altra. Per exemple, una escala creua diferents pisos." + }, + "attributes" : [ "symmetric", "object" ], + "id" : "7" + }, { + "iri" : "https://w3id.org/bot#hostsElement", + "baseIri" : "https://w3id.org/bot", + "range" : "6", + "annotations" : { + "seeAlso" : [ { + "identifier" : "seeAlso", + "language" : "undefined", + "value" : "https://w3id.org/bot#hasSubElement", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "hostsElement", + "en" : "hosts element", + "da" : "hoster element", + "nl" : "heeft element" + }, + "domain" : "6", + "comment" : { + "en" : "This property is DEPRECATED, use bot:hasSubElement instead // ORIGINAL definition: Relation between an element a) and another element b) hosted by element a). Example: inst:wall bot:hostsElement inst:window", + "da" : "This property is DEPRECATED, use bot:hasSubElement instead // ORIGINAL definition: Relation mellem en bygningsdel a) og en anden bygningsdel b) hostet af element a). Eksempel: inst:wall bot:hostsElement inst:window", + "nl" : "This property is DEPRECATED, use bot:hasSubElement instead // ORIGINAL definition: Relatie tussen een gebouwelement a) en een ander element b) dat een ander element in zich heeft a). Voorbeeld: inst:wall bot:hostsElement inst:window" + }, + "attributes" : [ "deprecated", "object" ], + "id" : "8" + }, { + "iri" : "https://w3id.org/bot#hasSpace", + "baseIri" : "https://w3id.org/bot", + "range" : "11", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/bot#", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "stable", + "type" : "label" + } ], + "domainIncludes" : [ { + "identifier" : "domainIncludes", + "language" : "undefined", + "value" : "https://w3id.org/bot#Storey", + "type" : "iri" + } ] + }, + "label" : { + "de" : "hat Raum", + "IRI-based" : "hasSpace", + "sv" : "har rum", + "fi" : "omaa tilan", + "pt" : "tem espaço", + "en" : "has space", + "it" : "ha spazio", + "fr" : "contient pièce", + "zh-cn" : "包含空间", + "es" : "tiene espacio", + "cs" : "má prostor", + "sk" : "má priestor", + "fa" : "فضا دارد", + "da" : "har rum", + "ca" : "té espai", + "nl" : "heeft ruimte", + "tr" : "Odası var" + }, + "superproperty" : [ "4" ], + "domain" : "2", + "comment" : { + "de" : "Beziehung von Räumen, die sich in einer Zone befinden. Oft ist die rdfs:domain eine Instanz von bot:Storey oder bot:Building.", + "fi" : "Suhde vyöhykkeeseen kuuluviin tiloihin. Tyypillinen lähtöjoukko ovat luokkien bot:Storey tai bot:Building instanssit.", + "sv" : "Relation till rum som inryms i en zon. Typiska domäner för bot:hasSpace är förekomster av bot:Storey och bot:Building.", + "pt" : "Relação com espaços contidos numa zona. Os domínios típicos de bot:hasSpace são instâncias de bot:Storey ou de bot:Building.", + "en" : "Relation to spaces contained in a zone. The typical domains of bot:hasSpace are instances of bot:Storey or bot:Building.", + "it" : "Relazione con gli spazi contenuti in una zona. Il tipico dominio di bot:hasSpace è l'unione di bot:Storey e bot:Building.", + "fr" : "Relation à définir entre les pièces d'une même zone. Cette propriété s'applique typiquement sur des instances de bot:Storey et bot:Building.", + "zh-cn" : "区域含有空间的关系。 bot:hasSpace的典型使用范围是bot:Storey和bot:Building中的实例。", + "es" : "Relación a espacios contenidos en una zona. Los dominios típicos de bot:hasSpace son instancias de bot:Storey o bot:Building.", + "cs" : "Vztah prostorů nacházejících se v zóně a dané zóny. Typická doména bot:hasSpace jsou instance bot:Storey a bot:Building.", + "sk" : "Vzťah priestorov nachádzajúcich sa v zóne a danej zóny. Typická doména bot:hasSpace sú inštancie bot:Storey a bot:Buuilding.", + "fa" : "ارتباط با فضاهایی که دربرگرفته شده‌اند. دامنه‌ی اصلی bot:hasSpace عنصرهایی از جنس bot:Building وbot:Storey هستند.", + "da" : "Relation til rum indeholdt i en zone. De typiske domæner for bot:hasSpace er forekomster af bot:Storey og bot:Building.", + "nl" : "Relatie tot ruimtes die zich in een zone bevinden. De typische domeinen van bot:hasSpace zijn instanties van bot:Storey of bot:Building.", + "ca" : "Relació a espais continguts en una zona. Els dominis típics de bot:hasSpace són instàncies de bot:Storey o bot:Building.", + "tr" : "Bir bölgede bulunan odalarla ilişkisi. Bot:hasSpace için tipik etki alanları bot:Building ve bot:Storey örnekleridir." + }, + "attributes" : [ "object" ], + "id" : "10" + }, { + "iri" : "https://w3id.org/bot#adjacentElement", + "baseIri" : "https://w3id.org/bot", + "range" : "13", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/bot#", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "stable", + "type" : "label" + } ] + }, + "label" : { + "de" : "benachbartes Bauteil", + "IRI-based" : "adjacentElement", + "fi" : "viereinen elementti", + "sv" : "angränsande element", + "pt" : "elemento adjacente", + "en" : "adjacent element", + "it" : "elemento adiacente", + "fr" : "élément adjacent", + "zh-cn" : "相邻构件", + "es" : "elemento adyacente", + "cs" : "přilehlý element-prvek", + "sk" : "priľahlý element-prvok", + "fa" : "المان همجوار", + "da" : "tilstødende element", + "tr" : "Bitisik eleman", + "ca" : "element adjacent", + "nl" : "aangrenzend element" + }, + "superproperty" : [ "14" ], + "domain" : "13", + "comment" : { + "de" : "Beziehung zwischen einer Zone und dessen angrenzenden Bauteilen. Die Bauteile begrenzen die Zone.", + "sv" : "Relation mellan en zon och dess angränsande byggdelar, som avgränsar det fysiska utrymmet.", + "fi" : "Suhde vyöhykkeen ja sen viereisten, sitä rajaavien rakennuselementtien välillä.", + "pt" : "Relação entre uma zona e os elementos da construção que lhe são adjacentes, delimitando a zona.", + "en" : "Relation between a zone and its adjacent building elements, bounding the zone.", + "it" : "Relazione tra una zona e i suoi elementi di costruzione adiacenti che delimitano la zona stessa.", + "fr" : "Relation entre une zone et ses éléments adjacents, délimitant l'espace physique", + "zh-cn" : "区域中相邻建筑构件之间的关系,以该区域为界。", + "es" : "Relación entre una zona y sus elementos arquitectónicos adyacentes, que limitan el espacio físico.", + "cs" : "Vztah mezi zónou a její přilehlými stavebními prvky, obklopujícími danou zónu.", + "sk" : "Vzťah medzi zónou a stavebnými prvkami obklopujúcimi túto zónu.", + "fa" : "رابطه بین یک منطقه و المانهای ساختمانی همجوارش که حدود منطقه را مشخص می کنند. ", + "da" : "Relation mellem en zone og dens tilstødende bygningsdele, som afgrænser det fysiske rum.", + "nl" : "Relatie tussen een zone en zijn aangrenzende gebouwelementen. Het gebouwelement begrenst de zone.", + "tr" : "Bir bölge ile bitişik bina parçaları arasındaki ilişki, fiziksel alanı sınırlar.", + "ca" : "Relació entre una zona i els seus elements arquitectònics adjacents, que limiten l'espai físic." + }, + "attributes" : [ "object" ], + "id" : "12" + }, { + "iri" : "https://w3id.org/bot#has3DModel", + "baseIri" : "https://w3id.org/bot", + "range" : "13", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/bot#", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "unstable", + "type" : "label" + } ], + "domainIncludes" : [ { + "identifier" : "domainIncludes", + "language" : "undefined", + "value" : "https://w3id.org/bot#Zone", + "type" : "iri" + }, { + "identifier" : "domainIncludes", + "language" : "undefined", + "value" : "https://w3id.org/bot#Element", + "type" : "iri" + } ] + }, + "label" : { + "de" : "hat 3D Modell", + "IRI-based" : "has3DModel", + "sv" : "har 3D-modell", + "fi" : "omaa 3D-mallin", + "pt" : "tem modelo 3D", + "en" : "has 3D model", + "it" : "ha modello 3D", + "fr" : "a modèle 3D", + "zh-cn" : "含有3D模型", + "es" : "tiene modelo 3D", + "cs" : "má 3D model", + "sk" : "má 3D model", + "fa" : "مدل سه بعدی دارد", + "da" : "har 3D-model", + "tr" : "3D modeli var", + "nl" : "heeft 3D model", + "ca" : "té model 3D" + }, + "domain" : "13", + "comment" : { + "de" : "Verbindet eine Instanz von bot:Zone oder bot:Element zu einer IRI, die das zugehörige 3D Modell identifiziert. Das Modell kann in einem spezifischen RDF Vokabular kodiert sein. Andernfalls kann die IRI auch dereferenzierbar sein.", + "fi" : "Liittää vyöhykkeen (bot:Zone) tai elementin (bot:Element) sen 3D-mallin yksilöivään IRI:in. Tämä 3D-malli voi olla kuvattu jollakin siihen tarkoitetulla RDF-sanastolla. 3D-mallin IRI voi myös osoittaa johonkin olemassa olevalla dataformaatilla kuvattuun 3D-malliin, joka on ladattavissa IRI:n kautta.", + "sv" : "Länkar en instans av bot:Zone eller bot:Element till en IRI som identifierar dennas 3D-modell. 3D-modellen kan beskrivas med något avsett RDF-vokabulär; alternativt så kan den peka ut mot en extern representation uttryckt i något existerande dataformat för 3D-modellering.", + "pt" : "Relaciona qualquer bot:Zone ou bot:Element a um IRI que identifique o seu modelo 3D. Este modelo 3D pode ser descrito usando um vocabulário RDF dedicado. Caso contrário, o IRI do modelo 3D pode ser desreferenciável sendo possível receber, quando se pesquisa o IRI, uma representação do modelo 3D num qualquer formato de dados para modelos 3D.", + "en" : "Links any bot:Zone or bot:Element to a IRI that identifies its 3D Model. This 3D Model can then be described using some dedicated RDF vocabulary. Else, the 3D Model IRI could be dereferenceable, and when looking up the IRI one could retrieve a representation of the 3D Model with some existing data format for 3D models.", + "it" : "Collega una istanza di bot:Zone o bot:Element ad un IRI che identifica il suo modello 3D. Questo modello 3D può essere descritto usando dei vocabolari RDF dedicati. Altrimenti, lo IRI del modello 3D potrebbe essere dereferenziabile, permettendo tramite esso di raggiungere la rappresentazione del modello 3D codificata secondo un formato esistente per modelli 3D.", + "fr" : "Relie tout bot:Zone ou bot:Element à un IRI qui identifie son modèle 3D. Ce modèle 3D peut ensuite être décrit à l'aide d'un vocabulaire RDF spécifique. Sinon, le modèle 3D de l'IRI pourrait être déréférencé, et en recherchant l'IRI, on pourrait obtenir une représentation du modèle 3D basée sur un format de données existant pour modèles 3D.", + "zh-cn" : "将任何bot:Zone或bot:Element链接到标识其3D模型的IRI,然后可以使用一些专用的RDF词汇表来描述3D模型。 否则,3D模型IRI可能会被取消引用的,在此情况下,当查找IRI时,可以使用3D模型的某些现有数据格式检索3D模型。", + "es" : "Vincula cualquier bot:Zone o bot:Element a un IRI que identifica su modelo 3D. Este modelo 3D se puede describir utilizando un vocabulario RDF dedicado. De lo contrario, el IRI del modelo 3D podría ser dereferenciable, y al buscar el IRI se podría recuperar una representación del modelo 3D con algún formato de datos existente para los modelos 3D.", + "cs" : "Prepojuje akúkoľvek bot:Zone alebo bot:Element ku konkrétnemu IRI, ktoré identifikuje jej/jeho 3D model. Tento 3D model môže byť potom popísaný použitím konkrétnych RDF slovníkov. Alebo, konkrétne IRI konkrétneho 3D modelu môže byť dereferencovateľné a pokiaľ sa bude vyhľadávať podla IRI, vyhľadávajúci môže získať reprezentáciu 3D modelu pomocou/s existujúceho/cím datového/vým formátu/formátem pre reprezentáciu 3D modely.", + "sk" : "Propojuje jakoukoliv bot:Zone nebo bot:Element ke konkrétnímu IRI, které identifikuje její/jeho 3D model. Tento 3D model potom může být popsán využitím konkrétních RDF slovníků. Nebo, konkrétní IRI konkrétního 3D modelu může být dereferencovatelné, pokud se bude vyhledávat dle IRI, vyhledávající může získat reprezentaci 3D modelu pomocí/s existujícího/jícím datového/vým formátu/formátem pro reprezentaci 3D modelu.", + "fa" : "رابطه یک عنصر bot:Zoneیا bot:Element با یک IRI که مدل سه بعدی خود را مشخص می کند. این مدل سه بعدی را می توان با برخی کلمات اختصاصی RDF توصیف کرد. به عبارت دیگر، نشانی مدل سه بعدی می تواند ارائه ای از مدل سه بعدی را با برخی از قالب های داده موجود برای مدل های سه بعدی بازیابی کند.", + "da" : "Forbinder enhver instans af bot:Zone eller bot:Element med en IRI som identificerer dennes 3D-model. Denne 3D-model kan så beskrives ved brug af et dedikeret RDF-vokabular. Alternativt kan 3D-modellens IRI være dereferencerbar, sådan at der modtages en repræsentation af 3D-modellen i et eksisterende dataformat for 3D-modeller når IRIen slås op.", + "tr" : "bot:Zone'nin herhangi bir örneğini bağlar ya da bot:Element'i kendi 3D-modelini tanimlayan bir IRI ile bağlar. Bu 3D-model daha sonra özel bir RDF kelime kullanimi ile tanimlanabilir. Bu 3D model daha sonra özel bir RDF kelime kullanımı ile tanımlanabilir. Aksi takdirde, IRI'nin kaydı silinebilir.", + "nl" : "Verbindt gelijk welke bot:Zone of bot:Element instantie met een IRI die een 3D model identificeert. Dit 3D model kan beschreven worden d.m.v. een gespecialiseerde RDF vocabularium. Anderzijds kan de IRI, indien opgevraagd, ook doorverwijzen naar een 3D model in een bestaand data formaat.", + "ca" : "Vincula qualsevol bot:Zone o bot:Element a un IRI que identifica el seu model 3D. Aquest model 3D es pot descriure utilitzant un vocabulari RDF dedicat. En cas contrari, l'IRI de el model 3D podria ser desreferenciable, i al buscar la IRI es podria recuperar una representació de el model 3D amb algun format de dades existent pels models 3D." + }, + "attributes" : [ "object" ], + "id" : "15" + }, { + "iri" : "https://w3id.org/bot#hasSimple3DModel", + "baseIri" : "https://w3id.org/bot", + "range" : "17", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/bot#", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "unstable", + "type" : "label" + } ], + "domainIncludes" : [ { + "identifier" : "domainIncludes", + "language" : "undefined", + "value" : "https://w3id.org/bot#Zone", + "type" : "iri" + }, { + "identifier" : "domainIncludes", + "language" : "undefined", + "value" : "https://w3id.org/bot#Element", + "type" : "iri" + } ] + }, + "label" : { + "de" : "hat einfaches 3D Modell", + "IRI-based" : "hasSimple3DModel", + "fi" : "omaa yksinkertaisen 3D-mallin", + "sv" : "har enkel 3D-modell", + "pt" : "tem modelo 3D simples", + "en" : "has simple 3D model", + "it" : "ha modello 3D semplice", + "fr" : "a modèle 3D simple", + "zh-cn" : "含有简单的3D模型", + "es" : "tiene modelo 3D simple", + "cs" : "má jednoduchý 3D model", + "sk" : "má jednoduchý 3D model", + "fa" : "مدل سه بعدی ساده دارد", + "da" : "har simpel 3D-model", + "tr" : "Basit bir 3D modeli var", + "nl" : "heeft eenvoudig 3D model", + "ca" : "té un model 3D senzill" + }, + "domain" : "13", + "comment" : { + "de" : "Verbindet jede bot:Zone oder bot:Element zu einem 3D Model, dass als Literal codiert ist.", + "fi" : "Liittää vyöhykkeen (bot:Zone) tai elementin (bot:Element) sen yksinkertaiseksi arvoksi enkoodattuun 3D-malliin.", + "sv" : "Länkar en instans av bot:Zone eller bot:Element till en 3D-modell uttryckt som en RDF literal.", + "pt" : "Vincula qualquer bot:Zone ou bot:Element a um Modelo 3D codificado como um literal.", + "en" : "Links any bot:Zone or bot:Element to a 3D Model encoded as a literal.", + "it" : "Collega una istanza di bot:Zone o bot:Element ad un modello 3D codificato come un literal.", + "fr" : "Relie tout bot:Zone ou bot:Element à un modèle 3D encodé comme", + "zh-cn" : "将任何bot:Zone或bot:Element链接到编码为文本的3D模型。", + "es" : "Vincula cualquier bot:Zone o bot:Element a un modelo 3D codificado como literal.", + "cs" : "Propojuje jakýkoliv bot:Zone nebo bot:Element na 3D model definovaný jako literál.", + "sk" : "Prepojuje akýkoľvek bot:Zone alebo bot:Element na 3D model definovaný ako literál.", + "fa" : "رابطه یک عنصر bot:Zone یا bot:Elementبا یک مدل سه بعدی که به صورت یک نوشته رمزگذاری شده است.", + "da" : "Forbinder enhver instans af bot:Zone eller bot:Element med en 3D-model beskrevet som en literal.", + "tr" : "bot:Zone'nin herhangi bir örneğini bağlar ya da bot:Element'i bir literal olarak tanimlanan 3D-model ile bağlar.", + "ca" : "Vincula qualsevol bot:Zone o bot:Element a un model 3D codificat com literal.", + "nl" : "Verbindt gelijk welke bot:Zone of bot:Element instantie met een 3D model geëncodeerd in een literal." + }, + "attributes" : [ "datatype" ], + "id" : "16" + }, { + "iri" : "https://w3id.org/bot#interfaceOf", + "baseIri" : "https://w3id.org/bot", + "range" : "19", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/bot#", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "stable", + "type" : "label" + } ] + }, + "label" : { + "de" : "Schnittstelle von", + "IRI-based" : "interfaceOf", + "sv" : "gränssnitt för", + "fi" : "rajapintana", + "pt" : "interface de", + "en" : "interface of", + "it" : "interfaccia di", + "fr" : "interface de", + "zh-cn" : "交界面于", + "es" : "interfaz de", + "cs" : "je rozhraní/je rozhraním", + "sk" : "je rozhranie/rozhraním", + "fa" : "رابط است", + "da" : "grænseflade for", + "ca" : "interfície de", + "tr" : "Arayüzü", + "nl" : "interface van" + }, + "domain" : "0", + "comment" : { + "de" : "Beziehung zwischen einer Schnittstelle und einem anderen Ding (Gebäude zone, Bauteil oder owl:Thing).", + "sv" : "Relation mellan ett gränssnitt och något angränsande (en zon, en byggdel, eller owl:Thing).", + "fi" : "Suhde rajapinnan ja toisen asian välillä (rakennuksen vyöhyke, elementti, tai owl:Thing).", + "pt" : "Relação entre um interface e outra coisa (zona do edifício, elemento ou owl:Thing)", + "en" : "Relationship between an interface and another thing (building zone, element or owl:Thing)", + "it" : "Relazione tra un'interfaccia e un'altra cosa (zona di edificio, elemento di costruzione o owl:Thing)", + "fr" : "Relation à définir entre une interface et une zone ou un élément adjacents.", + "zh-cn" : "界面与其他对象(建筑热区,构件或owl:Thing)之间的关系。", + "es" : "Relación entre una interfaz y otra cosa (zona de construcción, elemento o owl:Thing)", + "cs" : "Vztah mezi rozhraním a přilehlou zónou nebo prvkem.", + "sk" : "Vzťah medzi rozhraním a priľahlou zónou alebo prvkom.", + "fa" : "رابطه بین یک رابط و یک عنصر دیگر (منطقه ساختمان، المان، و یا owl:Thing)", + "da" : "Relation mellem en grænseflade og en anden ting (bygningszone, bygningsdel eller owl:Thing).", + "nl" : "Relatie tussen een interface en een ander ding (gebouwzone, gebouwelement of owl:Thing).", + "ca" : "Relació entre una interfície i una altra cosa (zona de construcció, element o owl:Thing)", + "tr" : "Bir arabirim ile bitişik bir bölge veya bina parçası arasındaki ilişki." + }, + "attributes" : [ "object" ], + "id" : "18" + }, { + "iri" : "https://w3id.org/bot#containsElement", + "baseIri" : "https://w3id.org/bot", + "range" : "13", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/bot#", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "stable", + "type" : "label" + } ] + }, + "label" : { + "de" : "enthält Bauteil", + "IRI-based" : "containsElement", + "fi" : "sisältää elementin", + "sv" : "innehåller byggdel", + "pt" : "comtém elemento", + "en" : "contains element", + "it" : "contiene elemento", + "fr" : "contient élément", + "zh-cn" : "包含构件", + "es" : "contiene elemento", + "cs" : "obsahuje element-prvek", + "sk" : "obsahuje element-prvok", + "fa" : "المان دربرگیرنده", + "da" : "indeholder bygningsdel", + "ca" : "conté un element", + "nl" : "bevat element", + "tr" : "Eleman icerir" + }, + "superproperty" : [ "14" ], + "domain" : "13", + "comment" : { + "de" : "Beziehung einer Zone zu einem Bauteil, dass es enthält.", + "fi" : "Suhde vyöhykkeen sisältämään rakennuselementtiin.", + "sv" : "Relation till en byggdel som inryms i en zon.", + "pt" : "Relação com um elemento da construção contido numa zona.", + "en" : "Relation to a building element contained in a zone.", + "it" : "Relazione con elementi di costruzione contenuti in una zona.", + "fr" : "Relation à définir entre un élément de bâti et la zone le contenant", + "zh-cn" : "区域中包含的建筑构件的关系。", + "es" : "Relación a un elemento arquitectónico contenido en una zona.", + "cs" : "Vztah k stavebnímu prvku obsaženém v zóně.", + "sk" : "Vzťah k stavebnému prvku, obsiahnutom v zóne.", + "fa" : "رابطه بین یک منطقه با المان ساختمانی که آنرا در بر گرفته است.", + "da" : "Relation til en bygningsdel, som er indeholdt i en zone.", + "tr" : "Bir bölgede bulunan bir bina parçasıyla ilişki.", + "nl" : "Relatie tussen zone en een gebouwelement bevat in die zone.", + "ca" : "Relació a un element arquitectònic contingut en una zona." + }, + "attributes" : [ "object" ], + "id" : "20" + }, { + "iri" : "https://w3id.org/bot#adjacentZone", + "baseIri" : "https://w3id.org/bot", + "range" : "2", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/bot#", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "stable", + "type" : "label" + } ], + "rangeIncludes" : [ { + "identifier" : "rangeIncludes", + "language" : "undefined", + "value" : "https://w3id.org/bot#Building", + "type" : "iri" + }, { + "identifier" : "rangeIncludes", + "language" : "undefined", + "value" : "https://w3id.org/bot#Site", + "type" : "iri" + }, { + "identifier" : "rangeIncludes", + "language" : "undefined", + "value" : "https://w3id.org/bot#Storey", + "type" : "iri" + }, { + "identifier" : "rangeIncludes", + "language" : "undefined", + "value" : "https://w3id.org/bot#Space", + "type" : "iri" + } ], + "domainIncludes" : [ { + "identifier" : "domainIncludes", + "language" : "undefined", + "value" : "https://w3id.org/bot#Building", + "type" : "iri" + }, { + "identifier" : "domainIncludes", + "language" : "undefined", + "value" : "https://w3id.org/bot#Storey", + "type" : "iri" + }, { + "identifier" : "domainIncludes", + "language" : "undefined", + "value" : "https://w3id.org/bot#Site", + "type" : "iri" + }, { + "identifier" : "domainIncludes", + "language" : "undefined", + "value" : "https://w3id.org/bot#Space", + "type" : "iri" + } ] + }, + "label" : { + "de" : "angrenzende Zone", + "IRI-based" : "adjacentZone", + "sv" : "angränsande zon", + "fi" : "viereinen vyöhyke", + "pt" : "zona adjacente", + "en" : "adjacent zone", + "it" : "zona adiacente", + "fr" : "zone adjacente", + "zh-cn" : "相邻区域", + "es" : "zona adyacente", + "cs" : "přilehlá zóna", + "sk" : "priľahlá zóna", + "fa" : "منطقه همجوار", + "da" : "tilstødende zone", + "nl" : "aangrenzende zone", + "tr" : "Bitisik bölge", + "ca" : "zona adjacent" + }, + "domain" : "2", + "comment" : { + "de" : "Beziehung zwischen zwei Zonen die eine gemeinsame Grenzfläche haben, aber sich nicht schneiden.", + "fi" : "Suhde kahden vyöhykkeen välillä, jotka jakavat yhteisen rajapinnan mutta eivät leikkaa toisiaan.", + "sv" : "Relation mellan två zoner som delar ett gemensamt gränssnitt men som inte korsar varandra.", + "pt" : "Relação entre duas zonas que partilham um interface comum mas que não se intersectam.", + "en" : "Relationship between two zones that share a common interface, but do not intersect.", + "it" : "Relazione tra due zone che condividono un'interfaccia senza però intersecarsi.", + "fr" : "Relation entre deux zones partageant une interface commune, sans intersection", + "zh-cn" : "两个区域之间共享公共界面但不相交的关系", + "es" : "Relación entre dos zonas que comparten una interfaz común, pero que no intersecan.", + "cs" : "Vztah mezi dvěmi zónami, které se dotýkají, ale neprotínají se.", + "sk" : "Vzťah medzi dvomi zónami, ktoré sa dotýkajú, ale nepretínajú sa.", + "fa" : "رابطه بین دو منطقه که یک رابط مشترک دارند، ولی منقطع نیستند.", + "da" : "Relation mellem to zoner, der deler en fælles grænseflade.", + "nl" : "Relatie tussen twee zones die een interface delen, maar niet doorsnijdend zijn", + "tr" : "Ortak bir arayüzü paylaşan iki bölge arasındaki bağlantı.", + "ca" : "Relació entre dues zones que comparteixen una interfície comuna, però que no interseccionen" + }, + "attributes" : [ "symmetric", "object" ], + "id" : "22" + }, { + "range" : "2", + "domain" : "24", + "attributes" : [ "anonymous", "object" ], + "id" : "23" + }, { + "range" : "2", + "domain" : "11", + "attributes" : [ "anonymous", "object" ], + "id" : "25" + }, { + "range" : "2", + "domain" : "9", + "attributes" : [ "anonymous", "object" ], + "id" : "26" + }, { + "range" : "2", + "domain" : "3", + "attributes" : [ "anonymous", "object" ], + "id" : "27" + }, { + "range" : "6", + "domain" : "2", + "attributes" : [ "anonymous", "object" ], + "id" : "30" + }, { + "range" : "9", + "domain" : "11", + "attributes" : [ "anonymous", "object" ], + "id" : "31" + }, { + "range" : "3", + "domain" : "11", + "attributes" : [ "anonymous", "object" ], + "id" : "32" + }, { + "range" : "24", + "domain" : "11", + "attributes" : [ "anonymous", "object" ], + "id" : "33" + }, { + "range" : "3", + "domain" : "24", + "attributes" : [ "anonymous", "object" ], + "id" : "34" + }, { + "range" : "9", + "domain" : "24", + "attributes" : [ "anonymous", "object" ], + "id" : "35" + }, { + "range" : "9", + "domain" : "3", + "attributes" : [ "anonymous", "object" ], + "id" : "37" + }, { + "iri" : "https://w3id.org/bot#aggregates", + "baseIri" : "https://w3id.org/bot", + "range" : "13", + "annotations" : { + "seeAlso" : [ { + "identifier" : "seeAlso", + "language" : "undefined", + "value" : "https://w3id.org/bot#hasSubElement", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "aggregates", + "en" : "aggregates", + "da" : "aggregerer" + }, + "domain" : "13", + "comment" : { + "en" : "This property is DEPRECATED, use bot:hasSubElement instead // ORIGINAL definition: Links an aggregate (a cluster of elements that can be treated as a single unit) to its sub-elements. For example an Air Handling Unit aggregates, among other elements, a fan and a filter.\n \nExample of how to use bot:aggregates in a product ontology:\n```\nproduct:Fan rdfs:subClassOf bot:Element .\nproduct:Filter rdfs:subClassOf bot:Element .\nproduct:hasFan rdfs:subPropertyOf bot:aggregates ;\n rdfs:range product:Fan .\nproduct:hasFilter rdfs:subPropertyOf product:aggregates ;\n rdfs:range product:Filter .\nproduct:AirHandlingUnit rdfs:subClassOf bot:Element ;\n rdfs:subClassOf [ owl:onProperty product:hasFan ; owl:someValuesFrom product:Fan ] ;\n rdfs:subClassOf [ owl:onProperty product:hasFilter ; owl:someValuesFrom product:Filter ] .\n```", + "da" : "This property is DEPRECATED, use bot:hasSubElement instead // ORIGINAL definition: Forbinder et aggregat (en klynge af elementer, som kan behandles som en samlet enhed) med dets delelementer. For eksempel aggregerer et ventilationsaggregat, blandt andre elementer, en ventilator og et filter.\n \nEksempel på brug af bot:aggregates i en produkt-ontologi:\n```\nproduct:Fan rdfs:subClassOf bot:Element .\nproduct:Filter rdfs:subClassOf bot:Element .\nproduct:hasFan rdfs:subPropertyOf bot:aggregates ;\n rdfs:range product:Fan .\nproduct:hasFilter rdfs:subPropertyOf product:aggregates ;\n rdfs:range product:Filter .\nproduct:AirHandlingUnit rdfs:subClassOf bot:Element ;\n rdfs:subClassOf [ owl:onProperty product:hasFan ; owl:someValuesFrom product:Fan ] ;\n rdfs:subClassOf [ owl:onProperty product:hasFilter ; owl:someValuesFrom product:Filter ] .\n```" + }, + "attributes" : [ "deprecated", "object" ], + "id" : "38" + }, { + "range" : "6", + "domain" : "0", + "attributes" : [ "anonymous", "object" ], + "id" : "39" + }, { + "range" : "2", + "domain" : "0", + "attributes" : [ "anonymous", "object" ], + "id" : "40" + }, { + "iri" : "https://w3id.org/bot#intersectingElement", + "baseIri" : "https://w3id.org/bot", + "range" : "13", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/bot#", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "stable", + "type" : "label" + } ] + }, + "label" : { + "de" : "schneidendes Bauteil", + "IRI-based" : "intersectingElement", + "fi" : "leikkaava elementti", + "sv" : "korsande byggdel", + "pt" : "elemento intersectante", + "en" : "intersecting element", + "it" : "elemento intersecante", + "fr" : "élément intersectant", + "zh-cn" : "相交构件", + "es" : "elemento de intersección", + "cs" : "protíná element-prvek", + "sk" : "pretína element-prvok", + "fa" : "المان متلاقی", + "da" : "krydsende Bygningsdel", + "ca" : "element d'intersecció", + "nl" : "doorsnijdend element", + "tr" : "Eleman ile temas" + }, + "superproperty" : [ "14" ], + "domain" : "13", + "comment" : { + "de" : "Beziehung zwischen einer Zone und einem Bauteil, das die Zone schneidet.", + "fi" : "Suhde vyöhykkeen ja sitä leikkaavan rakennuselementin välillä.", + "sv" : "Relationen mellan en zon och en byggdel som korsar zonen.", + "pt" : "Relação entre uma Zona e um Elemento construtivo que a intersecta.", + "en" : "Relation between a Zone and a building Element that intersects it.", + "it" : "Relazione tra una zona e un elemento di costruzione che la interseca.", + "fr" : "Relation entre une zone et un élément du bâtiment qui la traverse.", + "zh-cn" : "区域中相交建筑构件之间的关系。", + "es" : "Relación entre una zona y un elemento constructivo que la interseca.", + "cs" : "Vztah mezi zónou a stavebním prvkem, který ji protíná.", + "sk" : "Vzťah medzi zónou a stavebným prvkom, ktorý ju pretína.", + "fa" : "رابطه بین یک منطقه با المان ساختمانی که با آن در تلاقی است.", + "da" : "Forholdet mellem en zone og et bygningselement, der krydser det.", + "nl" : "Relatie tussen een zone en een gebouwelement die de zone doorsnijdt.", + "ca" : "Relació entre una zona i un element constructiu que la intersecta.", + "tr" : "Bir Bölge ve onunla kesişen bir yapı Elemanı arasındaki ilişki." + }, + "attributes" : [ "object" ], + "id" : "41" + }, { + "iri" : "https://w3id.org/bot#containsZone", + "baseIri" : "https://w3id.org/bot", + "range" : "2", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/bot#", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "stable", + "type" : "label" + } ], + "rangeIncludes" : [ { + "identifier" : "rangeIncludes", + "language" : "undefined", + "value" : "https://w3id.org/bot#Storey", + "type" : "iri" + }, { + "identifier" : "rangeIncludes", + "language" : "undefined", + "value" : "https://w3id.org/bot#Building", + "type" : "iri" + }, { + "identifier" : "rangeIncludes", + "language" : "undefined", + "value" : "https://w3id.org/bot#Space", + "type" : "iri" + }, { + "identifier" : "rangeIncludes", + "language" : "undefined", + "value" : "https://w3id.org/bot#Site", + "type" : "iri" + } ], + "domainIncludes" : [ { + "identifier" : "domainIncludes", + "language" : "undefined", + "value" : "https://w3id.org/bot#Space", + "type" : "iri" + }, { + "identifier" : "domainIncludes", + "language" : "undefined", + "value" : "https://w3id.org/bot#Storey", + "type" : "iri" + }, { + "identifier" : "domainIncludes", + "language" : "undefined", + "value" : "https://w3id.org/bot#Site", + "type" : "iri" + }, { + "identifier" : "domainIncludes", + "language" : "undefined", + "value" : "https://w3id.org/bot#Building", + "type" : "iri" + } ] + }, + "label" : { + "de" : "enthält Zone", + "IRI-based" : "containsZone", + "sv" : "innehåller zon", + "fi" : "sisältää vyöhykkeen", + "pt" : "contém zona", + "en" : "contains zone", + "it" : "contiene zona", + "fr" : "contient zone", + "zh-cn" : "包含区域", + "es" : "contiene zona", + "cs" : "obsahuje zónu", + "sk" : "obsahuje zónu", + "fa" : "منطقه دربرگیرنده", + "da" : "indeholder zone", + "nl" : "bevat zone", + "ca" : "conté zona", + "tr" : "Bölge icerir" + }, + "domain" : "2", + "subproperty" : [ "10", "1", "42" ], + "comment" : { + "de" : "Beziehung zwischen Zonen, wobei eine die andere enthält. Zum Beispiel kann eine Raumzone in einer Geschossszone enthalten sein, die wiederrum in einer Gebäudezone enthalten ist. bot:containsZone is eine transitive Beziehung, dass heisst zwischen der Raumzone im vorherigen Beispiel und der Gebäudezone besteht auch die Beziehung bot:containsZone.", + "sv" : "Relation till delzoner i en huvudzon. En rumszon kan till exempel inrymmas i en våningszon som i sin tur inryms i en byggnadszon. bot:containsZone är en transitiv relation vilket i exemplet betyder att rumszonen också inryms i byggnadszonen.", + "fi" : "Suhde päävyöhykkeen osavyöhykkeisiin. Tila voi esimerkiksi sisältyä kerrokseen, joka puolestaan voi sisältyä rakennukseen. bot:containsZone on transitiivinen ominaisuus. Tästä seuraa, että edellisessä esimerkissä myös rakennuksen ja tilan välillä pätee bot:containsZone.", + "pt" : "Relação entre subzonas de uma zona maior. Uma zona espacial pode, por exemplo, estar contida na zona de um piso que está, por sua vez, contida na zona de um edifício.nbot:containsZone é uma propriedade transitiva. Isto implica que, no exemplo anterior, exista uma relação bot:containsZone entre uma zona espacial e a zona do edifício.", + "en" : "Relationship to the subzones of a major zone. A space zone could for instance be contained in a storey zone which is further contained in a building zone. bot:containsZone is a transitive property. This implies that in the previous example a bot:containsZone relationship holds between the space zone and the building zone.", + "it" : "Relazione tra una zona e una sotto-zona. Per esempio, una zona spaziale può essere contenuta nella zona di un piano che a sua volta è contenuto nella zona di un edificio. bot:containsZone è una proprietà transitiva. Ciò implica che nel precedente esempio la relazione bot:containsZone si verifica anche tra la zona spaziale e la zona dell'edificio.", + "fr" : "Relation entre les sous-zones composant une zone plus grande. Cette propriété est transitive.", + "zh-cn" : "主要区域和其子区域的从属关系。 空间区域实例可以包含在楼层区域中,该楼层区域进一步包含在建筑物区域中。 bot:containsZone是传递属性。 这意味着在前面的示例中,空间区域和建筑物区域之间也保持着bot:containsZone关系。", + "es" : "Relación entre subzonas con una una zona principal. Por ejemplo, una zona espacial podría estar contenida en una zona de piso que a su vez está contenida en una zona de edificio. bot:containsZone es una propiedad transitiva. Esto implica que en el ejemplo anterior se mantiene una relación entre la zona espacial y la zona de edificio a través de bot:containsZone.", + "cs" : "Vztah hlavní zóny k pod-zónám. Prostorová zóna může být napříklat umístěna v zóně podlaží, která jako zóna je umístěna v zóně budova. bot:containsZone je přenositelná vlastnost, co znamená, že daná vlastnost vyšší zóny v dané hierarchii se promítá i do zón které jsou součástí vyšší zóny.", + "sk" : "Vzťah hlavnej zóny k pod-zónam. Priestorová zóna môže napríklad byť umiestnená v zóne podlažia, ktoré ako zóna môže byť ďalej umiestnené v zóne budovy. bot:containsZone je prenositeľná vlastnost, ktorá znamená, že pokiaľ väčšia zóna A je v zóne budova, aj menšie zóny, ktorú zóna A obsahuje, sú v budove.", + "fa" : "رابطه با زیر منطقه های یک منطقه اصلی. به عنوان مثال یک منطقه فضایی می تواند در یک منطقه طبقه قرار گرفته باشد که آن به خودی خود در یک منطقه ساختمان قرار گرفته. رابطه‌ی bot:containsZone یک رابطه‌ی انتقالی است. به این معنا که در مثال قبلی رابطه‌ی bot:containsZone بین بخش فضا و بخش ساختمان نیز برقرار میشود.", + "da" : "Relation til underzoner i en større zone. En rum-zone kan for eksempel være indeholdt i en etage-zone som ydermere er indeholdt i en bygnings-zone. bot:containsZone er en transitiv egenskab, hvilket betyder at rum-zonen i det forrige eksempel også er indeholdt i bygnings-zonen.", + "nl" : "Relatie tussen subzones van een hoofd zone. Een ruimtezone kan bijvoorbeeld worden bevat door een verdiepingszone, die wederom bevat wordt door een gebouwzone. bot:containsZone is een transitieve eigenschap, wat betekent dat in het vorige voorbeeld de ruimtezone ook bevat wordt door de gebouwzone.", + "tr" : "Daha büyük bir bölgedeki içerinde yeralan alt bölgelerin birbirleriyle bağlantısı. Örneğin, bir arsa bölgesi, bir bina bölgesini icerebilir ve bir bina bölgesi bir oda bölgesini icerebilir. bot:includeZone geçişli bir özelliktir, yani önceki örnekteki boşluk bölgesi de bina bölgesinde yer alır.", + "ca" : "Relació entre subzones amb una zona principal. Per exemple, una zona espacial podria estar continguda en una zona de pis que a la vegada està continguda en una zona d'edifici. bot:containsZone és una propietat transitiva. Això implica que en l'exemple anterior es manté una relació entre la zona espacial i la zona de edifici a través de bot:containsZone." + }, + "attributes" : [ "transitive", "object" ], + "id" : "4" + }, { + "iri" : "https://w3id.org/bot#hasElement", + "baseIri" : "https://w3id.org/bot", + "range" : "6", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/bot#", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "stable", + "type" : "label" + } ] + }, + "label" : { + "de" : "hat Bauteil", + "IRI-based" : "hasElement", + "sv" : "värd för element", + "fi" : "omaa elementin", + "pt" : "tem elemento", + "en" : "has element", + "it" : "ha elemento", + "fr" : "a élément", + "zh-cn" : "含构件", + "es" : "alberga elemento", + "cs" : "má element", + "sk" : "má element", + "fa" : "المان دارد", + "da" : "har element", + "ca" : "té element", + "nl" : "heeft element", + "tr" : "Elemanı var" + }, + "domain" : "2", + "subproperty" : [ "12", "41", "20" ], + "comment" : { + "de" : "Beziehung zwischen einer Zone und einem Bauteil, dass entweder in der Zone enthalten ist, angrenzend ist, oder sich mit ihr schneidet. Diese Beziehung sollte nicht explizit benutzt werden, sondern ergibt sich implizit aus den Unterbeziehungen. Es ermöglicht, zum Beispiel, dass mit einer Abfrage alle Türen eines Gebäudes, die sich mit einer Zone schneiden ermittelt werden können.", + "fi" : "Liittää vyöhykkeen (bot:Zone) elementtiin (bot:Element) joka on joko vyöhykkeen sisällä tai vierellä, tai leikkaa sen. Tätä suhdetta ei ole tarkoitus käyttää eksplisiittisesti, vaan se on pääteltävissä sen alaominaisuuksista. Mahdollistaa esimerkiksi kaikkien rakennuksen ovien hakemisen, kunhan ovet on merkitty rakennuksen tilojen viereisiksi elementeiksi (bot:adjacentElement).", + "sv" : "Länkar en Zon till en Byggnadsdel som antingen inryms i eller ligger jämte zonen. Den här relationen är inte avseddd att uttryckas explicit, utan den kommer att härledas från under-relationer. Detta möjliggör till exempel att man kan fråga efter samtliga dörrar i en byggnad givet att de ligger i anslutning till utrymmen i byggnaden.", + "pt" : "Relaciona uma zona com um elemento que está contido em, é adjacente ou intersecta a zona. Não se pretende que esta relação seja declarada explicitamente mas que seja inferida através das suas sub-propriedades. Esta propriedade permitirá, por exemplo, que se faça um query a todas as portas de um edifício que sejam adjacentes a espaços do edifício.", + "en" : "Links a Zone to an Element that is either contained in, adjacent to or intersecting with the Zone. The intended use of this relationship is not to be stated explicitly, but to be inferred from its sub-properties. It will, for example, allow one to query for all the doors of a building given that they have an adjacency to spaces of the building.", + "it" : "Collega una zona ad un elemento che è contenuto, adiacente o intersecante la zona stessa. Non si prevede l'uso esplicito di questa relazione che deve essere inferita dalle sue sotto-proprietà. Per esempio, permette di cercare tutte le porte di un edificio dato che sono adiacenti agli spazi di un edificio.", + "fr" : "Relie une zone à un élément qui est soit contenu dans la zone, adjacent à celle-ci, ou intersectant. L'utilisation prévue de cette relation ne doit pas être indiquée explicitement, mais doit être déduite de ses sous-propriétés. Elle permettra, par exemple, d'interroger toutes les portes d'un bâtiment si elles sont adjacentes à certains des espaces du bâtiment.", + "zh-cn" : "将区域链接到包含在区域中或附近的构件。 该关系的预期用途不是明确说明的,而是要从其子属性中推断出来。例如,如果构件与建筑物的空间相邻,可以借此查询建筑物的所有门。", + "es" : "Vincula una zona a un elemento que está contenido en, o es adyacente a, o interseca con la zona. El uso previsto de esta relación no es su definición explícita, sino inferirse de sus subpropiedades. Permitirá, por ejemplo, consultar todas las puertas de un edificio dado que tienen una adyacencia a los espacios del edificio.", + "cs" : "Napojuje zónu na stavební prvek, který se buďto nachází v dané zóně, nebo je na její rozhraní. Využitelnost tohoto vztahu není daná explicitně, ale je vyvozená z vlastností zúčastněných prvků. Například to umožní vyhledat všechny dveře, které se dotýkají konkrétních zón.", + "sk" : "Napojuje zónu na stavebný prvok, ktorý sa buď nachádza v danej zóne alebo je na jej rozhraní. Využitie tohto vzťahu nie je definované explicitne, ale je vyvodené z vlastností zúčastnených prvkov. Napríklad to umožní vyhľadať všetky dvere v budove, ktoré sa dotýkajú nejakých zón.", + "fa" : "رابطه یک منطقه با المانی که یا توسط منطقه در برگرفته شده و یا همجوار است. کاربرد این رابطه نه لزوماً به صورت مستقیم که بلکه برای نتیجه‌گیری حاصل از زیر-روابط ابراز شده است.این رابطه، به عنوان مثال، امکان استعلام (query) از همه درهای یک ساختمان که در مجاورت فضای خاصی هستند را فراهم می کند.", + "da" : "Forbinder en Zone til en bygningsdel der enten er indeholdt i eller tilstødende til zonen. Det er ikke hensigten at denne relation angives eksplicit, men at den udledes af dennes underegneskaber. Det vil for eksempel tillade en forespørgsel på alle døre i en bygning givet at disse er enten tilstødende eller indeholdt i rum i bygningen.", + "tr" : "Bir Bölgeyi, Bölgenin içinde veya yanında bulunan bir bina parçasına bağlar. Bu ilişkinin açık bir şekilde ifade edilmesi değil, alt özellikleri türetilmesi amaçlanmaktadır. Örneğin, bunların binadaki odalara bitişik ya da bitişik olduğu göz önüne alındığında, bir binadaki tüm kapılar için bir sorgu'ya izin verecektir.", + "ca" : "Vincula una zona a un element que està contingut en, o és adjacent a, o interseca amb la zona. L'ús previst d'aquesta relació no s'ha d'establir explícitament, sinó inferir-se de les seves subpropietats. Permetrà, per exemple, consultar totes les portes d'un edifici donat que tenen una adjacència als espais de l'edifici.", + "nl" : "Verbindt een bot:Zone instantie met een bot:Element instantie die er ofwel door bevat wordt, aangrenzend aan is of snijdend mee is. Het is aangeraden om deze relatie niet expliciet te maken, maar af te leiden uit het gebruik van zijn sub relaties. Deze relatie maakt het bijvoorbeeld mogelijk om alle deuren van een gebouw op te vragen als die aangrenzend gedefinieerd zijn aan de ruimtes van het gebouw." + }, + "attributes" : [ "object" ], + "id" : "14" + }, { + "iri" : "https://w3id.org/bot#hasZeroPoint", + "baseIri" : "https://w3id.org/bot", + "range" : "28", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/bot#", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "unstable", + "type" : "label" + } ], + "seeAlso" : [ { + "identifier" : "seeAlso", + "language" : "undefined", + "value" : "https://github.com/w3c-lbd-cg/bot/issues/41", + "type" : "iri" + } ] + }, + "label" : { + "de" : "hat Nullpunkt", + "IRI-based" : "hasZeroPoint", + "sv" : "har origo", + "fi" : "omaa nollapisteen", + "pt" : "tem ponto zero", + "en" : "has zero point", + "it" : "ha punto zero", + "fr" : "a point origine", + "zh-cn" : "含有原点", + "es" : "tiene punto cero", + "cs" : "má nulový bod", + "sk" : "má nulový bod", + "fa" : "نقطه صفر دارد", + "da" : "har nulpunkt", + "nl" : "heeft nulpunt", + "tr" : "Sıfır noktasi var", + "ca" : "té un punt zero" + }, + "domain" : "9", + "comment" : { + "de" : "Verbindet eine Instanz von bot:Site mit einer Instanz, die den Längen- und Breitengrad des Nullpunkts des Grundstücks definiert. Dies kann eine Instanz eines wgs84:Point sein. Die Definition von GIS und Geometrie ist nicht Bestandteil von BOT. Die Nutzung dieses Properties ist potenziell zweideutig und es besteht die Möglichkeit das es in Zukunft überarbeitet oder entfernt wird.", + "sv" : "Länkar en byggnadsplats (en instans av bot:Site) till en instans som uttrycker latitud och longitud för den berörda byggnadsplatsens origo. Detta kan exempelvis vara en instans av wgs84:Point. Definitioner för GIS och geometrier är utanför BOTs scope och användaren ansvarar själv för att välja en lämplig ontologi för detta syfte. Användningen av denna relation är potentiellt tvetydig och den kan komma att revideras eller tas bort i framtida versioner av ontologin.", + "fi" : "Liittää bot:Site:n instanssiin, jolla merkitään rakennustyömaan nollakohdan leveys- ja pituuspiirit. Tämä voi olla esimerkki wgs84:Point-luokan instanssi. BOT ei kata GIS:ä tai geometriaa, joten käyttäjän tulee valita sopiva ontologia.Tämän propertyn käyttö on mahdollisesti moniselitteistä, ja se voidaan poistaa tai tarkistaa ontologian tulevissa versioissa.", + "pt" : "Relaciona um bot:Site com uma instância que codifica a latitude e longitude do ponto zero de um sítio de construção. Este poderá ser uma instância de um wgs84:Point. As definições de SIG e de geometria não estão no escopo de BOT, sendo necessário que o/a utilizador/a seleccione uma ontologia adequada para o efeito. A utilização desta propriedade é potencialmente ambígua, podendo esta ser removida ou revista em versões futuras desta ontologia.", + "en" : "Links a bot:Site to an instance that encodes the latitude and longitude of the Zero Point of the building site. This could be an instance of a wgs84:Point. The definition of GIS and geometry is not within the scope of BOT and an appropriate ontology needs to be selected here by the user. The use of this property is potentially ambiguous and it might be removed or revised in future editions of the ontology.", + "it" : "Collega un bot:Site ad un'istanza che codifica la latitudine e longitudine del punto zero di un sito. Questa può essere l'istanza di wgs84:Point. La definizioen di GIS e geometrie non rientra nell'ambito di BOT ed è pertanto necessario che l'utente selezioni una ontologia adeguata. L'uso di questa proprietà è potenzialmente ambiguo e potrebbe essere rimossa o revisionata in successive edizioni dell'ontologia.", + "fr" : "Lie un bot:Site à un individu qui encode la latitude et la longitude du point zéro du site du bâtiment. Ceci peut être une instance de wgs84:Point. La définition du système de coordonnée géographique et de la géométrie n'est pas défini par BOT et l'utilisateur doit choisir l'ontologie appropriée. L'utilisation de cette propriété est potentiellement ambigue et elle pourrait être supprimée ou modifiée dans les prochaines versions de l'ontologie.", + "zh-cn" : "将bot:Site链接到一个实例,对该实例建筑位置原点的纬度和经度进行编码。 这可以是wgs84:Point的一个实例。 GIS和几何的定义不在BOT的范围内,用户需要在此处选择适当的本体。该属性的使用可能是模棱两可的,并且在以后的本体版本中可能会删除或修改它。", + "es" : "Vincula un bot:Site a una instancia que codifica la latitud y longitud del punto cero del sitio del edificio. Esta puede ser una instancia de un wgs84:Point. La definición de SIG y de la geometría no está dentro del alcance de BOT por lo que el usuario deberá utilizar para ello una ontología apropiada en combinación con BOT. El uso de esta propiedad es potencialmente ambigua y podría ser eliminada o revisada en ediciones futuras de la ontología.", + "cs" : "Napojuje bot:Site na instanci, který definuje zeměpisnou šířku a délku nulového bodu budovy. To může být instancí wgs84:Point. Definice GIS a geometrie není v rozsahu BOT a je potřebné použít jinou adekvátní ontologii. Využití této vlastnosti je potenciálně nepřesné a nejasné a může být odstraněno nebo revidováno v budoucích úpravách této ontologie.", + "sk" : "Napojuje bot:Site na inštanciu ktorá definuje zemepisnú šírku a dĺžku nulového bodu budovy. To môže byť inštanciou wgs84:Pint. Definícia GIS a geometrie nie je v rozsahu BOT a je potrebné použiť inú adekvátnu ontológiu. Využitie tejto vlastnosti je potenciálne nepresné a nejasné a môže byť odstránené alebo revidované v budúcich úpravách tejto ontológie.", + "fa" : "رابطه یک عنصر bot:Site با عنصری که طول وعرض جغرافیایی نقطه صفر سایت ساختمان را مشخص می کند. این میتواند یک عنصراز wgs84:Point باشد. تعریف GIS و هندسه در دایره‌ وضایف آنتالوژی جاینگاری ساختمان (BOT) نیست و لازم است یک آنتالوژی مناسب توسط کاربر برای این موضوع انتخاب شود. استفاده از این ویژگی به طور بالقوه ای مبهم است و ممکن است در نسخه های بعدی این آنتالوژی حذف یا اصلاح شود.", + "da" : "Forbinder et bot:Site med en forekomst, der beskriver en længde- og breddegrad for byggegrundens nulpunkt. Dette kunne være en forekomst af et wgs84:Point. Definitionen af GIS og geometri er ikke omfattet af BOT og en passende ontologi må her vælges af brugeren. Brugen af denne egenskab er potentielt tvetydig, og den kan fjernes eller revideres i fremtidige udgaver af ontologien.", + "tr" : "bir bot:Site ile bir olusumla bağlantı kurar: Bina alanının sıfır noktasında enlem ve boylamını tanımlayan bir örnekle bağlar. Bu bir wgs84:Point örneği olabilir. GPS ve geometrinin tanımı BOT kapsamında değildir ve kullanıcı tarafından uygun bir ontoloji seçilmelidir. Bu özelliğin kullanımı potansiyel olarak belirsizdir ve gelecekteki ontolojinin sürümlerinde kaldırılabilir veya revize edilebilir.", + "ca" : "Vincula un bot:Site a una instància que codifica la latitud i longitud de el punt zero del lloc de l'edifici. Aquesta pot ser una instància d'un wgs84:Point. La definició de SIG i de la geometria no està dins de l'abast de la BOT, per tant, l'usuari haurà de seleccionar una ontologia apropiada. L'ús d'aquesta propietat és potencialment ambigua i podria ser eliminada o revisada en edicions futures de l'ontologia.", + "nl" : "Verbindt een bot:Zone instantie met een instantie die de lengtegraad en breedtegraad definieert van het nulpunt van een bot:Site instantie. Dit kan een instantie zijn van wgs84:Point. De definitie van GIS en geometrie valt niet in de scope van BOT en de gebruiker moet een gepaste ontology hiervoor selecteren. Het gebruik van deze eigenschap is potentieel ambigu en kan verwijderd of herzien worden in toekomstige versies van deze ontologie." + }, + "attributes" : [ "object" ], + "id" : "43" + }, { + "iri" : "https://w3id.org/bot#hasBuilding", + "baseIri" : "https://w3id.org/bot", + "range" : "24", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/bot#", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "stable", + "type" : "label" + } ], + "domainIncludes" : [ { + "identifier" : "domainIncludes", + "language" : "undefined", + "value" : "https://w3id.org/bot#Site", + "type" : "iri" + } ] + }, + "label" : { + "de" : "hat Gebäude", + "IRI-based" : "hasBuilding", + "fi" : "omaa rakennuksen", + "sv" : "har byggnad", + "pt" : "tem edifício", + "en" : "has building", + "it" : "ha edificio", + "fr" : "contient bâtiment", + "zh-cn" : "包含建筑", + "es" : "tiene edificio", + "cs" : "má budovu", + "sk" : "má budovu", + "fa" : "ساختمان دارد", + "da" : "har bygning", + "nl" : "heeft gebouw", + "tr" : "Binası var", + "ca" : "té edifici" + }, + "superproperty" : [ "4" ], + "domain" : "2", + "comment" : { + "de" : "Beziehung zwischen Gebäuden, die in einer Zone enthalten sind. Oft ist hier die rdfs:domain eine Instanz von bot:Site.", + "sv" : "Relation till byggnader som inryms i en zon. Typiska domäner för bot:hasBuilding är förekomster av bot:Site.", + "fi" : "Suhde vyöhykkeeseen kuuluviin rakennuksiin. Tyypillinen lähtöjoukko on luokan bot:Site instanssit.", + "pt" : "Relação com edifícios contidos numa zona. Os domínios típicos de bot:hasBuilding são instâncias de bot:Site.", + "en" : "Relation to buildings contained in a zone. The typical domains of bot:hasBuilding are instances of bot:Site.", + "it" : "Relazione con gli edifici contenuti in una zona. Il tipico dominio di bot:hasBuilding è bot:Site.", + "fr" : "Relation à définir entre les bâtiments d'une même zone. Cette propriété s'applique typiquement sur des instances de bot:Site.", + "zh-cn" : "区域中含有建筑的关系。 bot:hasBuilding的典型使用范围是bot:Site中的实例。", + "es" : "Relación con los edificios contenidos en una zona. Los dominios típicos de bot:hasBuilding son instancias de bot:Site.", + "cs" : "Vztah budov které jsou přilehlé k zóně. Typickým příkladem je bot:hasBuilding která je instancí bot:Site tzn. staveniště (stav. pozemeek) má budovu, budova stojí na pozemku.", + "sk" : "Vzťah budovy a pozemku, na ktorom stojí. Typická doména bot:hasBuilding je inštanciou bot:Site. Tzn. stavenisko(stavebný pozemok) má budovu.", + "fa" : "ارتباط با ساختمانهابی که دربرگرفته شده‌اند. دامنه اصلی bot:hasBuilding عنصرهایی از جنس bot:Site هستند.", + "da" : "Relation til bygninger indeholdt i en zone. De typiske domæner for bot:hasBuilding er forekomster af bot:Site.", + "ca" : "Relació amb els edificis continguts en una zona. Els dominis típics de bot:hasBuilding són instàncies de bot:Site", + "tr" : "Bir bölgeye dahil binalara ile ilişkisi. Bot:hasBuilding için tipik etki alanları bot:Site örnekleridir.", + "nl" : "Relatie tot gebouwen die zich in een zone bevinden. De typische domeinen van bot:hasBuilding zijn instanties van bot:Site" + }, + "attributes" : [ "object" ], + "id" : "42" + } ] +} \ No newline at end of file diff --git a/webvowl/data/display.json b/webvowl/data/display.json new file mode 100644 index 0000000..38d19d1 --- /dev/null +++ b/webvowl/data/display.json @@ -0,0 +1,627 @@ +{ + "_comment" : "Created with OWL2VOWL (version 0.3.7), http://vowl.visualdataweb.org", + "header" : { + "languages" : [ "en", "fr", "undefined" ], + "baseIris" : [ "http://www.w3.org/1999/02/22-rdf-syntax-ns", "http://www.w3.org/2000/01/rdf-schema", "http://www.w3.org/2001/XMLSchema", "https://ouvroir.umontreal.ca/onto/display" ], + "prefixList" : { + "owl" : "http://www.w3.org/2002/07/owl#", + "rdf" : "http://www.w3.org/1999/02/22-rdf-syntax-ns#", + "display" : "https://ouvroir.umontreal.ca/onto/display#", + "dcterms" : "http://purl.org/dc/terms/", + "xsd" : "http://www.w3.org/2001/XMLSchema#", + "" : "https://ouvroir.umontreal.ca/onto/display#", + "xml" : "http://www.w3.org/XML/1998/namespace", + "vs" : "http://www.w3.org/2003/06/sw-vocab-status/ns#", + "rdfs" : "http://www.w3.org/2000/01/rdf-schema#" + }, + "title" : { + "en" : "Display Ontology", + "fr" : "L’ontologie Display" + }, + "iri" : "https://ouvroir.umontreal.ca/onto/display#", + "version" : "0.0.0", + "author" : [ "Zoë Renaudie", "Emmanuel Chateau-Dutier", "Lena Krause", "David Valentine" ], + "description" : { + "en" : "This computer ontology is intended to describe in an explicit and formal way the features of a collection display or an exhibition (identification of the exhibition, proximity and contiguity of the works, vis-à-vis, etc.).\nThis ontology is developed at the Ouvroir laboratory in the framework of the partnership New uses of collections in art museums.\nProject manager: Lena Krause.\nScientific director: Emmanuel Chateau-Dutier.\nProject supported by the University of Montreal, the Canada Fund for Innovation and the Province of Quebec." + }, + "other" : { + "license" : [ { + "identifier" : "license", + "language" : "undefined", + "value" : "https://creativecommons.org/licenses/by/1.0/", + "type" : "iri" + } ], + "creator" : [ { + "identifier" : "creator", + "language" : "undefined", + "value" : "Lena Krause", + "type" : "label" + }, { + "identifier" : "creator", + "language" : "undefined", + "value" : "Zoë Renaudie", + "type" : "label" + }, { + "identifier" : "creator", + "language" : "undefined", + "value" : "Emmanuel Chateau-Dutier", + "type" : "label" + }, { + "identifier" : "creator", + "language" : "undefined", + "value" : "David Valentine", + "type" : "label" + } ], + "modified" : [ { + "identifier" : "modified", + "language" : "undefined", + "value" : "2023-08-28T09:22:00-04:00", + "type" : "label" + } ], + "versionInfo" : [ { + "identifier" : "versionInfo", + "language" : "undefined", + "value" : "0.0.0", + "type" : "label" + } ], + "title" : [ { + "identifier" : "title", + "language" : "en", + "value" : "Display Ontology", + "type" : "label" + }, { + "identifier" : "title", + "language" : "fr", + "value" : "L’ontologie Display", + "type" : "label" + } ], + "seeAlso" : [ { + "identifier" : "seeAlso", + "language" : "undefined", + "value" : "https://github.com/ouvroir/display-ontology", + "type" : "iri" + }, { + "identifier" : "seeAlso", + "language" : "undefined", + "value" : "https://ouvroir.umontreal.ca/en/projects/expots/", + "type" : "iri" + } ] + } + }, + "namespace" : [ ], + "class" : [ { + "id" : "17", + "type" : "owl:Class" + }, { + "id" : "22", + "type" : "owl:Class" + }, { + "id" : "9", + "type" : "owl:Class" + }, { + "id" : "14", + "type" : "owl:Class" + }, { + "id" : "1", + "type" : "owl:Class" + }, { + "id" : "13", + "type" : "owl:Class" + }, { + "id" : "19", + "type" : "owl:Class" + }, { + "id" : "4", + "type" : "owl:Class" + }, { + "id" : "24", + "type" : "owl:Class" + }, { + "id" : "23", + "type" : "owl:Class" + }, { + "id" : "20", + "type" : "owl:Class" + }, { + "id" : "2", + "type" : "owl:Class" + }, { + "id" : "7", + "type" : "owl:Class" + }, { + "id" : "5", + "type" : "owl:Class" + }, { + "id" : "11", + "type" : "owl:Class" + } ], + "classAttribute" : [ { + "iri" : "https://ouvroir.umontreal.ca/onto/display#MountingDevice", + "baseIri" : "https://ouvroir.umontreal.ca/onto/display", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://ouvroir.umontreal.ca/onto/display#", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "unstable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "MountingDevice" + }, + "comment" : { + "fr" : "Classe ou propriété? La notion d’interface a été évoquée.\nLa relation entre l’expôt et le support pourrait, par exemple, être définie par une propriété précisant la manière (suspendu, posé, accroché, en fonction d’un vocabulaire contrôlé) et une propriété précisant l’objet utilisé pour ce faire, si nécessaire (avec vocabulaire contrôlé puisqu’on ne voudra probablement pas avoir de l’info sur les instances du dispositif d’accrochage). Propiétés de la relation topologique (?), celle-ci envisagée comme entité, permettant de garder séparés les expôts et la topologie." + }, + "id" : "17" + }, { + "iri" : "https://ouvroir.umontreal.ca/onto/display#VisualArtifact", + "baseIri" : "https://ouvroir.umontreal.ca/onto/display", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://ouvroir.umontreal.ca/onto/display#", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "unstable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "VisualArtifact", + "en" : "visual artifact", + "fr" : "artéfact visuel" + }, + "id" : "22", + "superClasses" : [ "2" ] + }, { + "iri" : "https://ouvroir.umontreal.ca/onto/display#Showcase", + "baseIri" : "https://ouvroir.umontreal.ca/onto/display", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://ouvroir.umontreal.ca/onto/display#", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "unstable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Showcase", + "en" : "showcase", + "fr" : "vitrine" + }, + "id" : "9", + "superClasses" : [ "5" ] + }, { + "iri" : "https://ouvroir.umontreal.ca/onto/display#Exhibit", + "baseIri" : "https://ouvroir.umontreal.ca/onto/display", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://ouvroir.umontreal.ca/onto/display#", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "unstable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Exhibit", + "en" : "exhibit", + "fr" : "expôt" + }, + "subClasses" : [ "13", "2", "5", "23", "20" ], + "comment" : { + "fr" : "Objet exposé" + }, + "id" : "14" + }, { + "iri" : "https://ouvroir.umontreal.ca/onto/display#SonicArtifact", + "baseIri" : "https://ouvroir.umontreal.ca/onto/display", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://ouvroir.umontreal.ca/onto/display#", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "unstable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "SonicArtifact", + "en" : "sonic artifact", + "fr" : "artéfact sonore" + }, + "id" : "1", + "superClasses" : [ "2" ] + }, { + "iri" : "https://ouvroir.umontreal.ca/onto/display#InformativeExhibit", + "baseIri" : "https://ouvroir.umontreal.ca/onto/display", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://ouvroir.umontreal.ca/onto/display#", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "unstable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "InformativeExhibit" + }, + "comment" : { + "fr" : "Expôt fournissant de l’information. Exemple : cartel." + }, + "id" : "13", + "superClasses" : [ "14" ] + }, { + "iri" : "https://ouvroir.umontreal.ca/onto/display#DistancingDevice", + "baseIri" : "https://ouvroir.umontreal.ca/onto/display", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://ouvroir.umontreal.ca/onto/display#", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "unstable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "DistancingDevice" + }, + "id" : "19", + "superClasses" : [ "20" ] + }, { + "iri" : "https://ouvroir.umontreal.ca/onto/display#Surface", + "baseIri" : "https://ouvroir.umontreal.ca/onto/display", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://ouvroir.umontreal.ca/onto/display#", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "unstable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Surface" + }, + "comment" : { + "fr" : "Terme \"surface\" à reconsidérer : on essaie de représenter murs, plafonds, planchers, cimaises utilisés comme surface d’exposition.\n\nSurface plane, convexe, concave, accidentée.\n\nSurface mobile, cloison mobile (par contre immobile dans le cadre d’une exposition)." + }, + "id" : "4", + "superClasses" : [ "5" ] + }, { + "iri" : "https://ouvroir.umontreal.ca/onto/display#Display", + "baseIri" : "https://ouvroir.umontreal.ca/onto/display", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://ouvroir.umontreal.ca/onto/display#", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "unstable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Display", + "en" : "display", + "fr" : "display" + }, + "comment" : { + "en" : "Aggregate of exhibits arranged for the presentation of works or artifacts in an exhibition space.", + "fr" : "Ensemble ou agrégat d’expôts agencés pour la présentation d’œuvres ou d’artéfacts dans un espace d’exposition." + }, + "id" : "24" + }, { + "iri" : "https://ouvroir.umontreal.ca/onto/display#Artwork", + "baseIri" : "https://ouvroir.umontreal.ca/onto/display", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://ouvroir.umontreal.ca/onto/display#", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "unstable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Artwork", + "en" : "artwork", + "fr" : "œuvre d’art" + }, + "comment" : { + "fr" : "À discuter : positionnement dans la hiérarchie (artéfact ou non?)." + }, + "id" : "23", + "superClasses" : [ "14" ] + }, { + "iri" : "https://ouvroir.umontreal.ca/onto/display#StructuralExhibit", + "baseIri" : "https://ouvroir.umontreal.ca/onto/display", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://ouvroir.umontreal.ca/onto/display#", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "unstable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "StructuralExhibit" + }, + "subClasses" : [ "19" ], + "comment" : { + "fr" : "Contrainte physique qui structure l’espace d’exposition. Détermine ou influence la relation spatiale entre l’expôt et l’origine du point de vue.\nExemple : poteau de délimitation, poteau de mise à distance, poteau de balisage, poteau de guidage, corde, barrière, barrière de corde\nmazzanine\ncadre (regarder un expôt à travers un cadre, un trou ou un objectif).\nÀ discuter : portes et fenêtres incluses dans un display, ou autres éléments fixes de l’espace du bâtiment." + }, + "id" : "20", + "superClasses" : [ "14" ] + }, { + "iri" : "https://ouvroir.umontreal.ca/onto/display#Artifact", + "baseIri" : "https://ouvroir.umontreal.ca/onto/display", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://ouvroir.umontreal.ca/onto/display#", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "unstable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Artifact", + "en" : "artifact", + "fr" : "artéfact" + }, + "subClasses" : [ "22", "1" ], + "id" : "2", + "superClasses" : [ "14" ] + }, { + "iri" : "https://ouvroir.umontreal.ca/onto/display#Base", + "baseIri" : "https://ouvroir.umontreal.ca/onto/display", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://ouvroir.umontreal.ca/onto/display#", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "unstable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Base" + }, + "comment" : { + "fr" : "Socle, plateforme, base, etc." + }, + "id" : "7", + "superClasses" : [ "5" ] + }, { + "iri" : "https://ouvroir.umontreal.ca/onto/display#Support", + "baseIri" : "https://ouvroir.umontreal.ca/onto/display", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://ouvroir.umontreal.ca/onto/display#", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "unstable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Support" + }, + "subClasses" : [ "4", "7", "9", "11" ], + "comment" : { + "fr" : "instanciable? Est-il nécessaire de créer une hiérarchie de classe?\n\nPar exemple, veut-on identifier de façon unique chaque \"base\" utilisé dans l’espace d’exposition, si ce support n’est qu’un type générique?\n\nOu veut-on dire qu’un expôt est posé sur un support générique de type \"chevalet\" sans identifier chaque chevalet? Par exemple, une collection d’objets posés sur des chevalets. Dans ce cas, un système de typage avec vocabulaire contrôlé serait approprié (Exhibit hasSupportType Easel au lieu d’instancier chaque chevalet).\n\nMais nous voudrons probablement identifier les meubles, les murs, les plafonds utilisés comme support. Tous les supports ne partageraient donc pas les mêmes propriétés, voire certains supports seraient des expôts et d’autres non (à discuter).\n\nLa question est : besoin d’indentification? Si oui, instanciation. Sinon, typage avec vocabulaire contrôlé. Solution ontologique à discuter." + }, + "id" : "5", + "superClasses" : [ "14" ] + }, { + "iri" : "https://ouvroir.umontreal.ca/onto/display#Easel", + "baseIri" : "https://ouvroir.umontreal.ca/onto/display", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://ouvroir.umontreal.ca/onto/display#", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "unstable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Easel", + "en" : "easel", + "fr" : "chevalet" + }, + "id" : "11", + "superClasses" : [ "5" ] + } ], + "property" : [ { + "id" : "0", + "type" : "rdfs:SubClassOf" + }, { + "id" : "3", + "type" : "rdfs:SubClassOf" + }, { + "id" : "6", + "type" : "rdfs:SubClassOf" + }, { + "id" : "8", + "type" : "rdfs:SubClassOf" + }, { + "id" : "10", + "type" : "rdfs:SubClassOf" + }, { + "id" : "12", + "type" : "rdfs:SubClassOf" + }, { + "id" : "15", + "type" : "rdfs:SubClassOf" + }, { + "id" : "16", + "type" : "rdfs:SubClassOf" + }, { + "id" : "18", + "type" : "rdfs:SubClassOf" + }, { + "id" : "21", + "type" : "rdfs:SubClassOf" + }, { + "id" : "25", + "type" : "rdfs:SubClassOf" + }, { + "id" : "26", + "type" : "rdfs:SubClassOf" + } ], + "propertyAttribute" : [ { + "range" : "2", + "domain" : "1", + "attributes" : [ "object", "anonymous" ], + "id" : "0" + }, { + "range" : "5", + "domain" : "4", + "attributes" : [ "object", "anonymous" ], + "id" : "3" + }, { + "range" : "5", + "domain" : "7", + "attributes" : [ "object", "anonymous" ], + "id" : "6" + }, { + "range" : "5", + "domain" : "9", + "attributes" : [ "object", "anonymous" ], + "id" : "8" + }, { + "range" : "5", + "domain" : "11", + "attributes" : [ "object", "anonymous" ], + "id" : "10" + }, { + "range" : "14", + "domain" : "13", + "attributes" : [ "object", "anonymous" ], + "id" : "12" + }, { + "range" : "14", + "domain" : "2", + "attributes" : [ "object", "anonymous" ], + "id" : "15" + }, { + "range" : "14", + "domain" : "5", + "attributes" : [ "object", "anonymous" ], + "id" : "16" + }, { + "range" : "20", + "domain" : "19", + "attributes" : [ "object", "anonymous" ], + "id" : "18" + }, { + "range" : "2", + "domain" : "22", + "attributes" : [ "object", "anonymous" ], + "id" : "21" + }, { + "range" : "14", + "domain" : "23", + "attributes" : [ "object", "anonymous" ], + "id" : "25" + }, { + "range" : "14", + "domain" : "20", + "attributes" : [ "object", "anonymous" ], + "id" : "26" + } ] +} \ No newline at end of file diff --git a/webvowl/data/foaf.json b/webvowl/data/foaf.json new file mode 100644 index 0000000..4897985 --- /dev/null +++ b/webvowl/data/foaf.json @@ -0,0 +1,2894 @@ +{ + "_comment" : "Created with OWL2VOWL (version 0.3.7), http://vowl.visualdataweb.org", + "header" : { + "languages" : [ "undefined" ], + "baseIris" : [ "http://schema.org", "http://www.w3.org/2000/01/rdf-schema", "http://www.w3.org/2003/01/geo/wgs84_pos", "http://purl.org/dc/terms", "http://www.w3.org/2001/XMLSchema", "http://xmlns.com/foaf/0.1", "http://www.w3.org/2000/10/swap/pim/contact", "http://www.w3.org/2004/02/skos/core" ], + "prefixList" : { + "owl" : "http://www.w3.org/2002/07/owl#", + "rdf" : "http://www.w3.org/1999/02/22-rdf-syntax-ns#", + "wot" : "http://xmlns.com/wot/0.1/", + "xsd" : "http://www.w3.org/2001/XMLSchema#", + "dc" : "http://purl.org/dc/elements/1.1/", + "xml" : "http://www.w3.org/XML/1998/namespace", + "vs" : "http://www.w3.org/2003/06/sw-vocab-status/ns#", + "foaf" : "http://xmlns.com/foaf/0.1/", + "rdfs" : "http://www.w3.org/2000/01/rdf-schema#" + }, + "title" : { + "undefined" : "Friend of a Friend (FOAF) vocabulary" + }, + "iri" : "http://xmlns.com/foaf/0.1/", + "description" : { + "undefined" : "The Friend of a Friend (FOAF) RDF vocabulary, described using W3C RDF Schema and the Web Ontology Language." + }, + "other" : { + "title" : [ { + "identifier" : "title", + "language" : "undefined", + "value" : "Friend of a Friend (FOAF) vocabulary", + "type" : "label" + } ] + } + }, + "namespace" : [ ], + "class" : [ { + "id" : "3", + "type" : "owl:Thing" + }, { + "id" : "9", + "type" : "owl:Class" + }, { + "id" : "1", + "type" : "owl:equivalentClass" + }, { + "id" : "18", + "type" : "owl:Thing" + }, { + "id" : "19", + "type" : "owl:Thing" + }, { + "id" : "5", + "type" : "owl:Thing" + }, { + "id" : "20", + "type" : "rdfs:Literal" + }, { + "id" : "8", + "type" : "rdfs:Literal" + }, { + "id" : "11", + "type" : "owl:Class" + }, { + "id" : "21", + "type" : "owl:Thing" + }, { + "id" : "22", + "type" : "rdfs:Literal" + }, { + "id" : "24", + "type" : "rdfs:Literal" + }, { + "id" : "26", + "type" : "rdfs:Literal" + }, { + "id" : "27", + "type" : "rdfs:Literal" + }, { + "id" : "37", + "type" : "owl:equivalentClass" + }, { + "id" : "45", + "type" : "rdfs:Literal" + }, { + "id" : "46", + "type" : "rdfs:Literal" + }, { + "id" : "53", + "type" : "rdfs:Literal" + }, { + "id" : "56", + "type" : "rdfs:Literal" + }, { + "id" : "59", + "type" : "rdfs:Literal" + }, { + "id" : "60", + "type" : "owl:Class" + }, { + "id" : "61", + "type" : "rdfs:Literal" + }, { + "id" : "6", + "type" : "rdfs:Literal" + }, { + "id" : "62", + "type" : "rdfs:Literal" + }, { + "id" : "12", + "type" : "owl:equivalentClass" + }, { + "id" : "55", + "type" : "rdfs:Literal" + }, { + "id" : "69", + "type" : "rdfs:Literal" + }, { + "id" : "71", + "type" : "owl:Class" + }, { + "id" : "36", + "type" : "owl:Class" + }, { + "id" : "86", + "type" : "owl:Class" + }, { + "id" : "83", + "type" : "owl:Class" + }, { + "id" : "94", + "type" : "owl:Class" + }, { + "id" : "73", + "type" : "rdfs:Literal" + }, { + "id" : "68", + "type" : "rdfs:Literal" + }, { + "id" : "93", + "type" : "rdfs:Literal" + }, { + "id" : "33", + "type" : "owl:Thing" + }, { + "id" : "49", + "type" : "rdfs:Literal" + }, { + "id" : "29", + "type" : "owl:Thing" + }, { + "id" : "101", + "type" : "rdfs:Literal" + }, { + "id" : "39", + "type" : "owl:Thing" + }, { + "id" : "63", + "type" : "owl:equivalentClass" + }, { + "id" : "64", + "type" : "owl:equivalentClass" + }, { + "id" : "102", + "type" : "owl:equivalentClass" + }, { + "id" : "78", + "type" : "owl:Class" + }, { + "id" : "77", + "type" : "owl:Class" + }, { + "id" : "13", + "type" : "owl:equivalentClass" + }, { + "id" : "58", + "type" : "rdfs:Literal" + }, { + "id" : "100", + "type" : "rdfs:Literal" + }, { + "id" : "106", + "type" : "rdfs:Literal" + }, { + "id" : "52", + "type" : "rdfs:Literal" + }, { + "id" : "88", + "type" : "rdfs:Literal" + }, { + "id" : "118", + "type" : "rdfs:Literal" + }, { + "id" : "126", + "type" : "owl:Class" + }, { + "id" : "2", + "type" : "owl:equivalentClass" + }, { + "id" : "32", + "type" : "owl:equivalentClass" + }, { + "id" : "10", + "type" : "owl:Class" + } ], + "classAttribute" : [ { + "iri" : "http://www.w3.org/2002/07/owl#Thing", + "baseIri" : "http://owl2vowl.de", + "id" : "3", + "label" : { + "undefined" : "Thing" + } + }, { + "iri" : "http://www.w3.org/2004/02/skos/core#Concept", + "baseIri" : "http://www.w3.org/2004/02/skos/core", + "instances" : 0, + "label" : { + "IRI-based" : "Concept", + "undefined" : "Concept" + }, + "attributes" : [ "external" ], + "id" : "9" + }, { + "iri" : "http://xmlns.com/foaf/0.1/Agent", + "equivalent" : [ "13" ], + "baseIri" : "http://xmlns.com/foaf/0.1", + "instances" : 0, + "annotations" : { + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "stable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Agent", + "undefined" : "Agent" + }, + "subClasses" : [ "10", "11", "12" ], + "comment" : { + "undefined" : "An agent (eg. person, group, software or physical artifact)." + }, + "attributes" : [ "equivalent" ], + "id" : "1" + }, { + "iri" : "http://www.w3.org/2002/07/owl#Thing", + "baseIri" : "http://owl2vowl.de", + "id" : "18", + "label" : { + "undefined" : "Thing" + } + }, { + "iri" : "http://www.w3.org/2002/07/owl#Thing", + "baseIri" : "http://owl2vowl.de", + "id" : "19", + "label" : { + "undefined" : "Thing" + } + }, { + "iri" : "http://www.w3.org/2002/07/owl#Thing", + "baseIri" : "http://owl2vowl.de", + "id" : "5", + "label" : { + "undefined" : "Thing" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "20", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "id" : "8", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://xmlns.com/foaf/0.1/Organization", + "baseIri" : "http://xmlns.com/foaf/0.1", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "stable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Organization", + "undefined" : "Organization" + }, + "comment" : { + "undefined" : "An organization." + }, + "id" : "11", + "superClasses" : [ "1" ] + }, { + "iri" : "http://www.w3.org/2002/07/owl#Thing", + "baseIri" : "http://owl2vowl.de", + "id" : "21", + "label" : { + "undefined" : "Thing" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "22", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "24", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "26", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "27", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://schema.org/CreativeWork", + "baseIri" : "http://schema.org", + "instances" : 0, + "label" : { + "IRI-based" : "CreativeWork" + }, + "attributes" : [ "external", "equivalent" ], + "id" : "37" + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "45", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "46", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "53", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "56", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "59", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://xmlns.com/foaf/0.1/Project", + "baseIri" : "http://xmlns.com/foaf/0.1", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Project", + "undefined" : "Project" + }, + "comment" : { + "undefined" : "A project (a collective endeavour of some kind)." + }, + "id" : "60" + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "61", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "6", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "62", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://xmlns.com/foaf/0.1/Person", + "equivalent" : [ "63", "64" ], + "baseIri" : "http://xmlns.com/foaf/0.1", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "stable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Person", + "undefined" : "Person" + }, + "comment" : { + "undefined" : "A person." + }, + "attributes" : [ "equivalent" ], + "id" : "12", + "superClasses" : [ "1", "36" ] + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "55", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "69", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://xmlns.com/foaf/0.1/PersonalProfileDocument", + "baseIri" : "http://xmlns.com/foaf/0.1", + "instances" : 0, + "annotations" : { + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "PersonalProfileDocument", + "undefined" : "PersonalProfileDocument" + }, + "comment" : { + "undefined" : "A personal profile RDF document." + }, + "id" : "71", + "superClasses" : [ "2" ] + }, { + "iri" : "http://www.w3.org/2003/01/geo/wgs84_pos#SpatialThing", + "baseIri" : "http://www.w3.org/2003/01/geo/wgs84_pos", + "instances" : 0, + "label" : { + "IRI-based" : "SpatialThing", + "undefined" : "Spatial Thing" + }, + "subClasses" : [ "12" ], + "attributes" : [ "external" ], + "id" : "36" + }, { + "iri" : "http://xmlns.com/foaf/0.1/OnlineChatAccount", + "baseIri" : "http://xmlns.com/foaf/0.1", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "unstable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "OnlineChatAccount", + "undefined" : "Online Chat Account" + }, + "comment" : { + "undefined" : "An online chat account." + }, + "id" : "86", + "superClasses" : [ "78" ] + }, { + "iri" : "http://xmlns.com/foaf/0.1/OnlineGamingAccount", + "baseIri" : "http://xmlns.com/foaf/0.1", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "unstable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "OnlineGamingAccount", + "undefined" : "Online Gaming Account" + }, + "comment" : { + "undefined" : "An online gaming account." + }, + "id" : "83", + "superClasses" : [ "78" ] + }, { + "iri" : "http://xmlns.com/foaf/0.1/LabelProperty", + "baseIri" : "http://xmlns.com/foaf/0.1", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "unstable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "LabelProperty", + "undefined" : "Label Property" + }, + "comment" : { + "undefined" : "A foaf:LabelProperty is any RDF property with texual values that serve as labels." + }, + "id" : "94" + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "id" : "73", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "id" : "68", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "id" : "93", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2002/07/owl#Thing", + "baseIri" : "http://owl2vowl.de", + "id" : "33", + "label" : { + "undefined" : "Thing" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "id" : "49", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2002/07/owl#Thing", + "baseIri" : "http://owl2vowl.de", + "id" : "29", + "label" : { + "undefined" : "Thing" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "id" : "101", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2002/07/owl#Thing", + "baseIri" : "http://owl2vowl.de", + "id" : "39", + "label" : { + "undefined" : "Thing" + } + }, { + "iri" : "http://www.w3.org/2000/10/swap/pim/contact#Person", + "baseIri" : "http://www.w3.org/2000/10/swap/pim/contact", + "instances" : 0, + "label" : { + "IRI-based" : "Person" + }, + "attributes" : [ "external", "equivalent" ], + "id" : "63" + }, { + "iri" : "http://schema.org/Person", + "baseIri" : "http://schema.org", + "instances" : 0, + "label" : { + "IRI-based" : "Person" + }, + "attributes" : [ "external", "equivalent" ], + "id" : "64" + }, { + "iri" : "http://schema.org/ImageObject", + "baseIri" : "http://schema.org", + "instances" : 0, + "label" : { + "IRI-based" : "ImageObject" + }, + "attributes" : [ "external", "equivalent" ], + "id" : "102" + }, { + "iri" : "http://xmlns.com/foaf/0.1/OnlineAccount", + "baseIri" : "http://xmlns.com/foaf/0.1", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "OnlineAccount", + "undefined" : "Online Account" + }, + "subClasses" : [ "77", "86", "83" ], + "comment" : { + "undefined" : "An online account." + }, + "id" : "78" + }, { + "iri" : "http://xmlns.com/foaf/0.1/OnlineEcommerceAccount", + "baseIri" : "http://xmlns.com/foaf/0.1", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "unstable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "OnlineEcommerceAccount", + "undefined" : "Online E-commerce Account" + }, + "comment" : { + "undefined" : "An online e-commerce account." + }, + "id" : "77", + "superClasses" : [ "78" ] + }, { + "iri" : "http://purl.org/dc/terms/Agent", + "baseIri" : "http://purl.org/dc/terms", + "instances" : 0, + "label" : { + "IRI-based" : "Agent" + }, + "attributes" : [ "external", "equivalent" ], + "id" : "13" + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "58", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "100", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "106", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "52", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "88", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "118", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Class", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "instances" : 0, + "label" : { + "IRI-based" : "Class" + }, + "attributes" : [ "external" ], + "id" : "126" + }, { + "iri" : "http://xmlns.com/foaf/0.1/Document", + "equivalent" : [ "37" ], + "baseIri" : "http://xmlns.com/foaf/0.1", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "stable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Document", + "undefined" : "Document" + }, + "subClasses" : [ "71", "32" ], + "comment" : { + "undefined" : "A document." + }, + "attributes" : [ "equivalent" ], + "id" : "2" + }, { + "iri" : "http://xmlns.com/foaf/0.1/Image", + "equivalent" : [ "102" ], + "baseIri" : "http://xmlns.com/foaf/0.1", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "stable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Image", + "undefined" : "Image" + }, + "comment" : { + "undefined" : "An image." + }, + "attributes" : [ "equivalent" ], + "id" : "32", + "superClasses" : [ "2" ] + }, { + "iri" : "http://xmlns.com/foaf/0.1/Group", + "baseIri" : "http://xmlns.com/foaf/0.1", + "instances" : 0, + "annotations" : { + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "stable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Group", + "undefined" : "Group" + }, + "comment" : { + "undefined" : "A class of Agents." + }, + "id" : "10", + "superClasses" : [ "1" ] + } ], + "property" : [ { + "id" : "0", + "type" : "owl:objectProperty" + }, { + "id" : "4", + "type" : "owl:datatypeProperty" + }, { + "id" : "7", + "type" : "owl:datatypeProperty" + }, { + "id" : "14", + "type" : "owl:objectProperty" + }, { + "id" : "16", + "type" : "owl:objectProperty" + }, { + "id" : "17", + "type" : "owl:objectProperty" + }, { + "id" : "23", + "type" : "owl:objectProperty" + }, { + "id" : "25", + "type" : "owl:objectProperty" + }, { + "id" : "28", + "type" : "owl:objectProperty" + }, { + "id" : "30", + "type" : "owl:objectProperty" + }, { + "id" : "31", + "type" : "owl:objectProperty" + }, { + "id" : "35", + "type" : "owl:objectProperty" + }, { + "id" : "38", + "type" : "owl:objectProperty" + }, { + "id" : "44", + "type" : "owl:datatypeProperty" + }, { + "id" : "47", + "type" : "owl:objectProperty" + }, { + "id" : "48", + "type" : "owl:datatypeProperty" + }, { + "id" : "50", + "type" : "owl:objectProperty" + }, { + "id" : "51", + "type" : "owl:datatypeProperty" + }, { + "id" : "54", + "type" : "owl:datatypeProperty" + }, { + "id" : "57", + "type" : "owl:datatypeProperty" + }, { + "id" : "65", + "type" : "owl:datatypeProperty" + }, { + "id" : "66", + "type" : "owl:datatypeProperty" + }, { + "id" : "67", + "type" : "owl:datatypeProperty" + }, { + "id" : "70", + "type" : "owl:datatypeProperty" + }, { + "id" : "72", + "type" : "owl:datatypeProperty" + }, { + "id" : "15", + "type" : "owl:objectProperty" + }, { + "id" : "74", + "type" : "rdfs:SubClassOf" + }, { + "id" : "75", + "type" : "rdfs:SubClassOf" + }, { + "id" : "76", + "type" : "rdfs:SubClassOf" + }, { + "id" : "79", + "type" : "rdfs:SubClassOf" + }, { + "id" : "80", + "type" : "owl:objectProperty" + }, { + "id" : "81", + "type" : "owl:objectProperty" + }, { + "id" : "82", + "type" : "rdfs:SubClassOf" + }, { + "id" : "34", + "type" : "owl:objectProperty" + }, { + "id" : "85", + "type" : "rdfs:SubClassOf" + }, { + "id" : "87", + "type" : "owl:datatypeProperty" + }, { + "id" : "89", + "type" : "rdfs:SubClassOf" + }, { + "id" : "90", + "type" : "rdfs:SubClassOf" + }, { + "id" : "91", + "type" : "owl:objectProperty" + }, { + "id" : "92", + "type" : "owl:datatypeProperty" + }, { + "id" : "95", + "type" : "owl:datatypeProperty" + }, { + "id" : "96", + "type" : "owl:objectProperty" + }, { + "id" : "97", + "type" : "owl:datatypeProperty" + }, { + "id" : "98", + "type" : "rdfs:SubClassOf" + }, { + "id" : "99", + "type" : "owl:datatypeProperty" + }, { + "id" : "43", + "type" : "owl:objectProperty" + }, { + "id" : "42", + "type" : "owl:objectProperty" + }, { + "id" : "103", + "type" : "owl:datatypeProperty" + }, { + "id" : "104", + "type" : "owl:objectProperty" + }, { + "id" : "105", + "type" : "owl:datatypeProperty" + }, { + "id" : "107", + "type" : "owl:objectProperty" + }, { + "id" : "108", + "type" : "owl:datatypeProperty" + }, { + "id" : "109", + "type" : "owl:objectProperty" + }, { + "id" : "110", + "type" : "owl:objectProperty" + }, { + "id" : "40", + "type" : "owl:objectProperty" + }, { + "id" : "41", + "type" : "owl:objectProperty" + }, { + "id" : "84", + "type" : "owl:objectProperty" + }, { + "id" : "111", + "type" : "owl:datatypeProperty" + }, { + "id" : "112", + "type" : "owl:datatypeProperty" + }, { + "id" : "113", + "type" : "owl:datatypeProperty" + }, { + "id" : "114", + "type" : "owl:objectProperty" + }, { + "id" : "116", + "type" : "owl:disjointWith" + }, { + "id" : "117", + "type" : "owl:disjointWith" + }, { + "id" : "119", + "type" : "owl:datatypeProperty" + }, { + "id" : "120", + "type" : "owl:disjointWith" + }, { + "id" : "121", + "type" : "owl:disjointWith" + }, { + "id" : "122", + "type" : "owl:objectProperty" + }, { + "id" : "123", + "type" : "owl:datatypeProperty" + }, { + "id" : "124", + "type" : "owl:objectProperty" + }, { + "id" : "125", + "type" : "owl:datatypeProperty" + }, { + "id" : "127", + "type" : "owl:datatypeProperty" + }, { + "id" : "115", + "type" : "owl:objectProperty" + }, { + "id" : "128", + "type" : "owl:objectProperty" + }, { + "id" : "129", + "type" : "owl:objectProperty" + } ], + "propertyAttribute" : [ { + "iri" : "http://xmlns.com/foaf/0.1/interest", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "2", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "interest", + "undefined" : "interest" + }, + "domain" : "1", + "comment" : { + "undefined" : "A page about a topic of interest to this person." + }, + "attributes" : [ "object" ], + "id" : "0" + }, { + "iri" : "http://xmlns.com/foaf/0.1/mbox_sha1sum", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "6", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "mbox_sha1sum", + "undefined" : "sha1sum of a personal mailbox URI name" + }, + "domain" : "5", + "comment" : { + "undefined" : "The sha1sum of the URI of an Internet mailbox associated with exactly one owner, the first owner of the mailbox." + }, + "attributes" : [ "datatype" ], + "id" : "4" + }, { + "iri" : "http://xmlns.com/foaf/0.1/nick", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "8", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "nick", + "undefined" : "nickname" + }, + "domain" : "5", + "comment" : { + "undefined" : "A short informal nickname characterising an agent (includes login identifiers, IRC and other chat nicknames)." + }, + "attributes" : [ "datatype" ], + "id" : "7" + }, { + "iri" : "http://xmlns.com/foaf/0.1/openid", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "2", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "openid", + "undefined" : "openid" + }, + "superproperty" : [ "15" ], + "domain" : "1", + "comment" : { + "undefined" : "An OpenID for an Agent." + }, + "attributes" : [ "inverse functional", "object" ], + "id" : "14" + }, { + "iri" : "http://xmlns.com/foaf/0.1/workInfoHomepage", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "2", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "workInfoHomepage", + "undefined" : "work info homepage" + }, + "domain" : "12", + "comment" : { + "undefined" : "A work info homepage of some person; a page about their work for some organization." + }, + "attributes" : [ "object" ], + "id" : "16" + }, { + "iri" : "http://xmlns.com/foaf/0.1/pastProject", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "3", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "pastProject", + "undefined" : "past project" + }, + "domain" : "12", + "comment" : { + "undefined" : "A project this person has previously worked on." + }, + "attributes" : [ "object" ], + "id" : "17" + }, { + "iri" : "http://xmlns.com/foaf/0.1/theme", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "19", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "archaic", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "theme", + "undefined" : "theme" + }, + "domain" : "19", + "comment" : { + "undefined" : "A theme." + }, + "attributes" : [ "object" ], + "id" : "23" + }, { + "iri" : "http://xmlns.com/foaf/0.1/knows", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "12", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "stable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "knows", + "undefined" : "knows" + }, + "domain" : "12", + "comment" : { + "undefined" : "A person known by this person (indicating some level of reciprocated interaction between the parties)." + }, + "attributes" : [ "object" ], + "id" : "25" + }, { + "iri" : "http://xmlns.com/foaf/0.1/focus", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "29", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "focus", + "undefined" : "focus" + }, + "domain" : "9", + "comment" : { + "undefined" : "The underlying or 'focal' entity associated with some SKOS-described concept." + }, + "attributes" : [ "object" ], + "id" : "28" + }, { + "iri" : "http://xmlns.com/foaf/0.1/phone", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "19", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "phone", + "undefined" : "phone" + }, + "domain" : "19", + "comment" : { + "undefined" : "A phone, specified using fully qualified tel: URI scheme (refs: http://www.w3.org/Addressing/schemes.html#tel)." + }, + "attributes" : [ "object" ], + "id" : "30" + }, { + "iri" : "http://xmlns.com/foaf/0.1/depicts", + "inverse" : "34", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "33", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "depicts", + "undefined" : "depicts" + }, + "domain" : "32", + "comment" : { + "undefined" : "A thing depicted in this representation." + }, + "attributes" : [ "object" ], + "id" : "31" + }, { + "iri" : "http://xmlns.com/foaf/0.1/based_near", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "36", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "based_near", + "undefined" : "based near" + }, + "domain" : "36", + "comment" : { + "undefined" : "A location that something is based near, for some broadly human notion of near." + }, + "attributes" : [ "object" ], + "id" : "35" + }, { + "iri" : "http://xmlns.com/foaf/0.1/page", + "inverse" : "40", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "2", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "stable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "page", + "undefined" : "page" + }, + "domain" : "39", + "subproperty" : [ "15", "41", "42", "43" ], + "comment" : { + "undefined" : "A page or document about this thing." + }, + "attributes" : [ "object" ], + "id" : "38" + }, { + "iri" : "http://xmlns.com/foaf/0.1/geekcode", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "26", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "archaic", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "geekcode", + "undefined" : "geekcode" + }, + "domain" : "12", + "comment" : { + "undefined" : "A textual geekcode for this person, see http://www.geekcode.com/geek.html" + }, + "attributes" : [ "datatype" ], + "id" : "44" + }, { + "iri" : "http://xmlns.com/foaf/0.1/primaryTopic", + "inverse" : "15", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "39", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "stable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "primaryTopic", + "undefined" : "primary topic" + }, + "domain" : "2", + "comment" : { + "undefined" : "The primary topic of some page or document." + }, + "attributes" : [ "object", "functional" ], + "id" : "47" + }, { + "iri" : "http://xmlns.com/foaf/0.1/givenName", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "49", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "givenName", + "undefined" : "Given name" + }, + "domain" : "19", + "comment" : { + "undefined" : "The given name of some person." + }, + "attributes" : [ "datatype" ], + "id" : "48" + }, { + "iri" : "http://xmlns.com/foaf/0.1/schoolHomepage", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "2", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "schoolHomepage", + "undefined" : "schoolHomepage" + }, + "domain" : "12", + "comment" : { + "undefined" : "A homepage of a school attended by the person." + }, + "attributes" : [ "object" ], + "id" : "50" + }, { + "iri" : "http://xmlns.com/foaf/0.1/gender", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "52", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "gender", + "undefined" : "gender" + }, + "domain" : "1", + "comment" : { + "undefined" : "The gender of this Agent (typically but not necessarily 'male' or 'female')." + }, + "attributes" : [ "datatype", "functional" ], + "id" : "51" + }, { + "iri" : "http://xmlns.com/foaf/0.1/dnaChecksum", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "55", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "archaic", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "dnaChecksum", + "undefined" : "DNA checksum" + }, + "domain" : "19", + "comment" : { + "undefined" : "A checksum for the DNA of some thing. Joke." + }, + "attributes" : [ "datatype" ], + "id" : "54" + }, { + "iri" : "http://xmlns.com/foaf/0.1/lastName", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "58", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "lastName", + "undefined" : "lastName" + }, + "domain" : "12", + "comment" : { + "undefined" : "The last name of a person." + }, + "attributes" : [ "datatype" ], + "id" : "57" + }, { + "iri" : "http://xmlns.com/foaf/0.1/status", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "45", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "unstable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "status", + "undefined" : "status" + }, + "domain" : "1", + "comment" : { + "undefined" : "A string expressing what the user is happy for the general public (normally) to know about their current activity." + }, + "attributes" : [ "datatype" ], + "id" : "65" + }, { + "iri" : "http://xmlns.com/foaf/0.1/yahooChatID", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "46", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "yahooChatID", + "undefined" : "Yahoo chat ID" + }, + "domain" : "19", + "comment" : { + "undefined" : "A Yahoo chat ID" + }, + "attributes" : [ "datatype" ], + "id" : "66" + }, { + "iri" : "http://xmlns.com/foaf/0.1/name", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "68", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "name", + "undefined" : "name" + }, + "domain" : "19", + "comment" : { + "undefined" : "A name for some thing." + }, + "attributes" : [ "datatype" ], + "id" : "67" + }, { + "iri" : "http://xmlns.com/foaf/0.1/icqChatID", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "53", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "icqChatID", + "undefined" : "ICQ chat ID" + }, + "domain" : "19", + "comment" : { + "undefined" : "An ICQ chat ID" + }, + "attributes" : [ "datatype" ], + "id" : "70" + }, { + "iri" : "http://xmlns.com/foaf/0.1/givenname", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "73", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "archaic", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "givenname", + "undefined" : "Given name" + }, + "domain" : "19", + "comment" : { + "undefined" : "The given name of some person." + }, + "attributes" : [ "datatype" ], + "id" : "72" + }, { + "iri" : "http://xmlns.com/foaf/0.1/isPrimaryTopicOf", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "2", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "stable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "isPrimaryTopicOf", + "undefined" : "is primary topic of" + }, + "superproperty" : [ "38" ], + "domain" : "39", + "subproperty" : [ "14", "43" ], + "comment" : { + "undefined" : "A document that this thing is the primary topic of." + }, + "attributes" : [ "inverse functional", "object" ], + "id" : "15" + }, { + "range" : "2", + "domain" : "32", + "attributes" : [ "anonymous", "object" ], + "id" : "74" + }, { + "range" : "2", + "domain" : "71", + "attributes" : [ "anonymous", "object" ], + "id" : "75" + }, { + "range" : "78", + "domain" : "77", + "attributes" : [ "anonymous", "object" ], + "id" : "76" + }, { + "range" : "36", + "domain" : "12", + "attributes" : [ "anonymous", "object" ], + "id" : "79" + }, { + "iri" : "http://xmlns.com/foaf/0.1/accountServiceHomepage", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "2", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "accountServiceHomepage", + "undefined" : "account service homepage" + }, + "domain" : "78", + "comment" : { + "undefined" : "Indicates a homepage of the service provide for this online account." + }, + "attributes" : [ "object" ], + "id" : "80" + }, { + "iri" : "http://xmlns.com/foaf/0.1/logo", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "19", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "logo", + "undefined" : "logo" + }, + "domain" : "19", + "comment" : { + "undefined" : "A logo representing some thing." + }, + "attributes" : [ "inverse functional", "object" ], + "id" : "81" + }, { + "range" : "78", + "domain" : "83", + "attributes" : [ "anonymous", "object" ], + "id" : "82" + }, { + "iri" : "http://xmlns.com/foaf/0.1/depiction", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "32", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "depiction", + "undefined" : "depiction" + }, + "domain" : "33", + "subproperty" : [ "84" ], + "comment" : { + "undefined" : "A depiction of some thing." + }, + "attributes" : [ "object" ], + "id" : "34" + }, { + "range" : "78", + "domain" : "86", + "attributes" : [ "anonymous", "object" ], + "id" : "85" + }, { + "iri" : "http://xmlns.com/foaf/0.1/family_name", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "88", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "archaic", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "family_name", + "undefined" : "family_name" + }, + "domain" : "12", + "comment" : { + "undefined" : "The family name of some person." + }, + "attributes" : [ "datatype" ], + "id" : "87" + }, { + "range" : "1", + "domain" : "12", + "attributes" : [ "anonymous", "object" ], + "id" : "89" + }, { + "range" : "1", + "domain" : "11", + "attributes" : [ "anonymous", "object" ], + "id" : "90" + }, { + "iri" : "http://xmlns.com/foaf/0.1/fundedBy", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "19", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "archaic", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "fundedBy", + "undefined" : "funded by" + }, + "domain" : "19", + "comment" : { + "undefined" : "An organization funding a project or person." + }, + "attributes" : [ "object" ], + "id" : "91" + }, { + "iri" : "http://xmlns.com/foaf/0.1/title", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "93", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "title", + "undefined" : "title" + }, + "domain" : "19", + "comment" : { + "undefined" : "Title (Mr, Mrs, Ms, Dr. etc)" + }, + "attributes" : [ "datatype" ], + "id" : "92" + }, { + "iri" : "http://xmlns.com/foaf/0.1/accountName", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "59", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "accountName", + "undefined" : "account name" + }, + "domain" : "78", + "comment" : { + "undefined" : "Indicates the name (identifier) associated with this online account." + }, + "attributes" : [ "datatype" ], + "id" : "95" + }, { + "iri" : "http://xmlns.com/foaf/0.1/account", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "78", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "account", + "undefined" : "account" + }, + "domain" : "1", + "comment" : { + "undefined" : "Indicates an account held by this agent." + }, + "attributes" : [ "object" ], + "id" : "96" + }, { + "iri" : "http://xmlns.com/foaf/0.1/jabberID", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "69", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "jabberID", + "undefined" : "jabber ID" + }, + "domain" : "19", + "comment" : { + "undefined" : "A jabber ID for something." + }, + "attributes" : [ "datatype" ], + "id" : "97" + }, { + "range" : "1", + "domain" : "10", + "attributes" : [ "anonymous", "object" ], + "id" : "98" + }, { + "iri" : "http://xmlns.com/foaf/0.1/age", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "100", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "unstable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "age", + "undefined" : "age" + }, + "domain" : "1", + "comment" : { + "undefined" : "The age in years of some agent." + }, + "attributes" : [ "datatype", "functional" ], + "id" : "99" + }, { + "iri" : "http://xmlns.com/foaf/0.1/homepage", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "2", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "stable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "homepage", + "undefined" : "homepage" + }, + "superproperty" : [ "15", "38" ], + "domain" : "39", + "comment" : { + "undefined" : "A homepage for some thing." + }, + "attributes" : [ "inverse functional", "object" ], + "id" : "43" + }, { + "iri" : "http://xmlns.com/foaf/0.1/tipjar", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "2", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "tipjar", + "undefined" : "tipjar" + }, + "superproperty" : [ "38" ], + "domain" : "1", + "comment" : { + "undefined" : "A tipjar document for this agent, describing means for payment and reward." + }, + "attributes" : [ "object" ], + "id" : "42" + }, { + "iri" : "http://xmlns.com/foaf/0.1/msnChatID", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "61", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "msnChatID", + "undefined" : "MSN chat ID" + }, + "domain" : "5", + "comment" : { + "undefined" : "An MSN chat ID" + }, + "attributes" : [ "datatype" ], + "id" : "103" + }, { + "iri" : "http://xmlns.com/foaf/0.1/topic_interest", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "18", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "topic_interest", + "undefined" : "topic_interest" + }, + "domain" : "1", + "comment" : { + "undefined" : "A thing of interest to this person." + }, + "attributes" : [ "object" ], + "id" : "104" + }, { + "iri" : "http://xmlns.com/foaf/0.1/aimChatID", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "106", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "aimChatID", + "undefined" : "AIM chat ID" + }, + "domain" : "19", + "comment" : { + "undefined" : "An AIM chat ID" + }, + "attributes" : [ "datatype" ], + "id" : "105" + }, { + "iri" : "http://xmlns.com/foaf/0.1/currentProject", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "3", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "currentProject", + "undefined" : "current project" + }, + "domain" : "12", + "comment" : { + "undefined" : "A current project this person works on." + }, + "attributes" : [ "object" ], + "id" : "107" + }, { + "iri" : "http://xmlns.com/foaf/0.1/skypeID", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "20", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "skypeID", + "undefined" : "Skype ID" + }, + "domain" : "1", + "comment" : { + "undefined" : "A Skype ID" + }, + "attributes" : [ "datatype" ], + "id" : "108" + }, { + "iri" : "http://xmlns.com/foaf/0.1/holdsAccount", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "78", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "archaic", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "holdsAccount", + "undefined" : "account" + }, + "domain" : "1", + "comment" : { + "undefined" : "Indicates an account held by this agent." + }, + "attributes" : [ "object" ], + "id" : "109" + }, { + "iri" : "http://xmlns.com/foaf/0.1/thumbnail", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "32", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "thumbnail", + "undefined" : "thumbnail" + }, + "domain" : "32", + "comment" : { + "undefined" : "A derived thumbnail image." + }, + "attributes" : [ "object" ], + "id" : "110" + }, { + "iri" : "http://xmlns.com/foaf/0.1/topic", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "39", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "topic", + "undefined" : "topic" + }, + "domain" : "2", + "comment" : { + "undefined" : "A topic of some page or document." + }, + "attributes" : [ "object" ], + "id" : "40" + }, { + "iri" : "http://xmlns.com/foaf/0.1/weblog", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "2", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "stable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "weblog", + "undefined" : "weblog" + }, + "superproperty" : [ "38" ], + "domain" : "1", + "comment" : { + "undefined" : "A weblog of some thing (whether person, group, company etc.)." + }, + "attributes" : [ "inverse functional", "object" ], + "id" : "41" + }, { + "iri" : "http://xmlns.com/foaf/0.1/img", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "32", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "img", + "undefined" : "image" + }, + "superproperty" : [ "34" ], + "domain" : "12", + "comment" : { + "undefined" : "An image that can be used to represent some thing (ie. those depictions which are particularly representative of something, eg. one's photo on a homepage)." + }, + "attributes" : [ "object" ], + "id" : "84" + }, { + "iri" : "http://xmlns.com/foaf/0.1/birthday", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "56", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "unstable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "birthday", + "undefined" : "birthday" + }, + "domain" : "1", + "comment" : { + "undefined" : "The birthday of this Agent, represented in mm-dd string form, eg. '12-31'." + }, + "attributes" : [ "datatype", "functional" ], + "id" : "111" + }, { + "iri" : "http://xmlns.com/foaf/0.1/sha1", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "101", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "unstable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "sha1", + "undefined" : "sha1sum (hex)" + }, + "domain" : "2", + "comment" : { + "undefined" : "A sha1sum hash, in hex." + }, + "attributes" : [ "datatype" ], + "id" : "112" + }, { + "iri" : "http://xmlns.com/foaf/0.1/firstName", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "24", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "firstName", + "undefined" : "firstName" + }, + "domain" : "12", + "comment" : { + "undefined" : "The first name of a person." + }, + "attributes" : [ "datatype" ], + "id" : "113" + }, { + "iri" : "http://xmlns.com/foaf/0.1/made", + "inverse" : "115", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "18", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "stable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "made", + "undefined" : "made" + }, + "domain" : "1", + "comment" : { + "undefined" : "Something that was made by this agent." + }, + "attributes" : [ "object" ], + "id" : "114" + }, { + "range" : "60", + "domain" : "2", + "attributes" : [ "anonymous", "object" ], + "id" : "116" + }, { + "range" : "12", + "domain" : "60", + "attributes" : [ "anonymous", "object" ], + "id" : "117" + }, { + "iri" : "http://xmlns.com/foaf/0.1/familyName", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "62", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "familyName", + "undefined" : "familyName" + }, + "domain" : "12", + "comment" : { + "undefined" : "The family name of some person." + }, + "attributes" : [ "datatype" ], + "id" : "119" + }, { + "range" : "2", + "domain" : "11", + "attributes" : [ "anonymous", "object" ], + "id" : "120" + }, { + "range" : "12", + "domain" : "11", + "attributes" : [ "anonymous", "object" ], + "id" : "121" + }, { + "iri" : "http://xmlns.com/foaf/0.1/member", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "1", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "stable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "member", + "undefined" : "member" + }, + "domain" : "10", + "comment" : { + "undefined" : "Indicates a member of a Group" + }, + "attributes" : [ "object" ], + "id" : "122" + }, { + "iri" : "http://xmlns.com/foaf/0.1/plan", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "27", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "plan", + "undefined" : "plan" + }, + "domain" : "12", + "comment" : { + "undefined" : "A .plan comment, in the tradition of finger and '.plan' files." + }, + "attributes" : [ "datatype" ], + "id" : "123" + }, { + "iri" : "http://xmlns.com/foaf/0.1/mbox", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "18", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "stable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "mbox", + "undefined" : "personal mailbox" + }, + "domain" : "1", + "comment" : { + "undefined" : "A personal mailbox, ie. an Internet mailbox associated with exactly one owner, the first owner of this mailbox. This is a 'static inverse functional property', in that there is (across time and change) at most one individual that ever has any particular value for foaf:mbox." + }, + "attributes" : [ "inverse functional", "object" ], + "id" : "124" + }, { + "iri" : "http://xmlns.com/foaf/0.1/surname", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "118", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "archaic", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "surname", + "undefined" : "Surname" + }, + "domain" : "12", + "comment" : { + "undefined" : "The surname of some person." + }, + "attributes" : [ "datatype" ], + "id" : "125" + }, { + "iri" : "http://xmlns.com/foaf/0.1/myersBriggs", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "22", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "myersBriggs", + "undefined" : "myersBriggs" + }, + "domain" : "12", + "comment" : { + "undefined" : "A Myers Briggs (MBTI) personality classification." + }, + "attributes" : [ "datatype" ], + "id" : "127" + }, { + "iri" : "http://xmlns.com/foaf/0.1/maker", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "1", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "stable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "maker", + "undefined" : "maker" + }, + "domain" : "18", + "comment" : { + "undefined" : "An agent that made this thing." + }, + "attributes" : [ "object" ], + "id" : "115" + }, { + "iri" : "http://xmlns.com/foaf/0.1/publications", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "2", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "publications", + "undefined" : "publications" + }, + "domain" : "12", + "comment" : { + "undefined" : "A link to the publications of this person." + }, + "attributes" : [ "object" ], + "id" : "128" + }, { + "iri" : "http://xmlns.com/foaf/0.1/workplaceHomepage", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "2", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "workplaceHomepage", + "undefined" : "workplace homepage" + }, + "domain" : "12", + "comment" : { + "undefined" : "A workplace homepage of some person; the homepage of an organization they work for." + }, + "attributes" : [ "object" ], + "id" : "129" + } ] +} \ No newline at end of file diff --git a/webvowl/data/new_ontology.json b/webvowl/data/new_ontology.json new file mode 100644 index 0000000..f1cb0df --- /dev/null +++ b/webvowl/data/new_ontology.json @@ -0,0 +1,28 @@ +{ + "_comment": "Empty ontology for WebVOWL Editor", + "header": { + "languages": [ + "en" + ], + "baseIris": [ + "http://www.w3.org/2000/01/rdf-schema" + ], + "iri": "http://visualdataweb.org/newOntology/", + "title": { + "en": "New ontology" + }, + "description": { + "en": "New ontology description" + } + }, + "namespace": [], + "metrics": { + "classCount": 0, + "datatypeCount": 0, + "objectPropertyCount": 0, + "datatypePropertyCount": 0, + "propertyCount": 0, + "nodeCount": 0, + "individualCount": 0 + } +} diff --git a/webvowl/data/template.json b/webvowl/data/template.json new file mode 100644 index 0000000..003d011 --- /dev/null +++ b/webvowl/data/template.json @@ -0,0 +1,163 @@ +{ + "namespace": [ + { + "name": "", + "iri": "" + } + ], + "header": { + "languages": [ + "all", + "occurring", + "languages" + ], + "title": { + "language": "label" + }, + "iri": "", + "version": "", + "author": [ + "Author One", + "Author Two" + ], + "description": { + "language": "label" + }, + "other": { + "someIdentifier": [ + { + "identifier": "someIdentifier", + "language": "undefined", + "value": "http://an.iri/", + "type": "iri" + } + ], + "someOtherIdentifier": [ + { + "identifier": "someOtherIdentifier", + "language": "undefined", + "value": "Some person", + "type": "label" + } + ] + } + }, + "metrics": { + "classCount": 40, + "datatypeCount": 13, + "objectPropertyCount": 23, + "datatypePropertyCount": 13, + "propertyCount": 36, + "nodeCount": 53, + "axiomCount": 216, + "individualCount": 8 + }, + "class": [ + { + "id": "", + "type": "" + } + ], + "classAttribute": [ + { + "id": "", + "label": "", + "iri": "", + "individuals": [ + { + "iri": "", + "labels": { + "language": "label" + }, + "annotations": {} + } + ], + "comment": "", + "equivalent": [ + "" + ], + "union": [ + "" + ], + "intersection": [ + "" + ], + "complement": [ + "" + ], + "attributes": [ + "deprecated", + "external", + "datatype", + "object", + "rdf" + ] + } + ], + "datatype": [ + { + "id": "", + "type": "" + } + ], + "datatypeAttribute": [ + { + "id": "", + "label": { + "language": "label" + }, + "iri": "", + "individuals": [ + { + "iri": "", + "labels": { + "language": "label" + }, + "annotations": {} + } + ], + "comment": "", + "equivalent": [ + "" + ] + } + ], + "property": [ + { + "id": "" + } + ], + "propertyAttribute": [ + { + "id": "", + "domain": "", + "range": "", + "inverse": "", + "label": { + "language": "label" + }, + "type": "", + "comment": "", + "cardinality": "", + "minCardinality": "", + "maxCardinality": "", + "subproperty": [ + "" + ], + "equivalent": [ + "" + ], + "attributes": [ + "deprecated", + "external", + "datatype", + "object", + "rdf", + "transitive", + "functional", + "inverse functional", + "symmetric" + ] + } + ] +} diff --git a/webvowl/data/vir.json b/webvowl/data/vir.json new file mode 100644 index 0000000..45c38ca --- /dev/null +++ b/webvowl/data/vir.json @@ -0,0 +1,10468 @@ +{ + "_comment" : "Created with OWL2VOWL (version 0.3.7), http://vowl.visualdataweb.org", + "header" : { + "languages" : [ "de", "ru", "pt", "el", "en", "fr", "zh", "undefined" ], + "baseIris" : [ "http://www.w3.org/1999/02/22-rdf-syntax-ns", "http://www.ics.forth.gr/isl/CRMsci", "http://iflastandards.info/ns/fr/frbr/frbroo", "http://w3id.org/vir", "http://www.w3.org/2000/01/rdf-schema", "http://www.w3.org/2001/XMLSchema", "http://www.cidoc-crm.org/cidoc-crm" ], + "prefixList" : { + "frbroo" : "http://iflastandards.info/ns/fr/frbr/frbroo/", + "owl" : "http://www.w3.org/2002/07/owl#", + "vann" : "http://purl.org/vocab/vann/", + "xsd" : "http://www.w3.org/2001/XMLSchema#", + "vir" : "http://w3id.org/vir#", + "rdfs" : "http://www.w3.org/2000/01/rdf-schema#", + "crm" : "http://www.cidoc-crm.org/cidoc-crm/", + "rdf" : "http://www.w3.org/1999/02/22-rdf-syntax-ns#", + "skos" : "http://www.w3.org/2004/02/skos/core#", + "crmsci" : "http://www.ics.forth.gr/isl/CRMsci/", + "" : "http://www.semanticweb.org/owl/owlapi/turtle#", + "dc" : "http://purl.org/dc/elements/1.1/", + "lio" : "https://w3id.org/lio/v1", + "xml" : "http://www.w3.org/XML/1998/namespace" + }, + "title" : { + "en" : "VIR - Visual Representation ontology" + }, + "iri" : "http://w3id.org/vir#", + "version" : "1.2", + "author" : [ "Nicola Carboni" ], + "description" : { + "undefined" : "This ontology, called VIR, is an extension of CIDOC-CRM created to sustain propositions on the nature of visual elements and permit these descriptions to be published on the Web.\nWith the term visual element, we refer to those signs identified in the visual space as distinct and documentable units, and subject to an analytical interpretation.\nThe scope of this ontology is to s to provide a framework to support the identification, annotation and interconnections between diverse visual elements and presents and assist their documentation and retrieval. Specifically, the model aims to clarify the identity and the relation of these visual signs, providing the necessary classes to characterise their constituent elements, reference, symbolic content and source of interpretation.\nVIR expands on key entities and properties from CIDOC-CRM, introducing new classes and relationships responding to the visual and art historical community, specifically building up on the iconographical tradition. The result is a model which differentiates between interpretation and element identified, providing a clear distinction between denotation and signification of an element. As a consequence of such distinction, the ontology allows for the definition of diverse denotative criteria for the same representation, which could change based on traditions and perspective. Visual objects can be, in fact, polysemic and ambiguous, and it is not so easy to pin down a denotative or connotative meaning because they are very much context-dependent." + }, + "comments" : { + "undefined" : "On 03/03/2019 change the range of K11 to E36_Visual_Item in order to accomodate the description of the recognition of Attributes. On 28/06/2021 added IC21_Similarity_Statement, together with K35_assigned_similarity_to and K36_is_similar_to to describe visual similarities annotations" + }, + "other" : { + "date" : [ { + "identifier" : "date", + "language" : "undefined", + "value" : "2019-02-26", + "type" : "label" + } ], + "creator" : [ { + "identifier" : "creator", + "language" : "undefined", + "value" : "Nicola Carboni", + "type" : "label" + } ], + "rights" : [ { + "identifier" : "rights", + "language" : "en", + "value" : "This work is distributed under a Creative Commons Attribution License (http://creativecommons.org/licenses/by/3.0/).", + "type" : "label" + } ], + "preferredNamespacePrefix" : [ { + "identifier" : "preferredNamespacePrefix", + "language" : "undefined", + "value" : "vir", + "type" : "label" + } ], + "versionInfo" : [ { + "identifier" : "versionInfo", + "language" : "undefined", + "value" : "1.2", + "type" : "label" + } ], + "preferredNamespaceUri" : [ { + "identifier" : "preferredNamespaceUri", + "language" : "undefined", + "value" : "http://w3id.org/vir#", + "type" : "label" + } ], + "title" : [ { + "identifier" : "title", + "language" : "en", + "value" : "VIR - Visual Representation ontology", + "type" : "label" + } ] + } + }, + "namespace" : [ ], + "class" : [ { + "id" : "3", + "type" : "owl:Class" + }, { + "id" : "69", + "type" : "owl:Class" + }, { + "id" : "41", + "type" : "owl:Class" + }, { + "id" : "108", + "type" : "owl:Class" + }, { + "id" : "4", + "type" : "owl:Class" + }, { + "id" : "133", + "type" : "owl:Class" + }, { + "id" : "134", + "type" : "owl:Class" + }, { + "id" : "100", + "type" : "owl:Class" + }, { + "id" : "57", + "type" : "owl:Class" + }, { + "id" : "135", + "type" : "owl:Class" + }, { + "id" : "157", + "type" : "owl:Class" + }, { + "id" : "219", + "type" : "owl:Class" + }, { + "id" : "241", + "type" : "owl:Class" + }, { + "id" : "15", + "type" : "owl:Class" + }, { + "id" : "259", + "type" : "owl:Class" + }, { + "id" : "265", + "type" : "owl:Class" + }, { + "id" : "19", + "type" : "owl:Class" + }, { + "id" : "63", + "type" : "owl:Class" + }, { + "id" : "11", + "type" : "owl:Class" + }, { + "id" : "299", + "type" : "owl:Thing" + }, { + "id" : "51", + "type" : "owl:Thing" + }, { + "id" : "83", + "type" : "rdfs:Literal" + }, { + "id" : "341", + "type" : "rdfs:Literal" + }, { + "id" : "67", + "type" : "owl:Class" + }, { + "id" : "344", + "type" : "rdfs:Literal" + }, { + "id" : "345", + "type" : "rdfs:Literal" + }, { + "id" : "346", + "type" : "rdfs:Literal" + }, { + "id" : "347", + "type" : "rdfs:Literal" + }, { + "id" : "95", + "type" : "rdfs:Literal" + }, { + "id" : "333", + "type" : "rdfs:Literal" + }, { + "id" : "348", + "type" : "rdfs:Literal" + }, { + "id" : "220", + "type" : "owl:Class" + }, { + "id" : "251", + "type" : "owl:Class" + }, { + "id" : "355", + "type" : "owl:Class" + }, { + "id" : "392", + "type" : "owl:Thing" + }, { + "id" : "156", + "type" : "owl:Class" + }, { + "id" : "40", + "type" : "owl:Class" + }, { + "id" : "77", + "type" : "owl:Class" + }, { + "id" : "233", + "type" : "owl:Class" + }, { + "id" : "249", + "type" : "owl:Class" + }, { + "id" : "179", + "type" : "owl:Class" + }, { + "id" : "331", + "type" : "owl:Class" + }, { + "id" : "25", + "type" : "owl:Class" + }, { + "id" : "5", + "type" : "owl:Class" + }, { + "id" : "106", + "type" : "owl:Class" + }, { + "id" : "132", + "type" : "owl:Class" + }, { + "id" : "8", + "type" : "owl:Class" + }, { + "id" : "44", + "type" : "owl:Class" + }, { + "id" : "198", + "type" : "owl:Class" + }, { + "id" : "231", + "type" : "owl:Class" + }, { + "id" : "78", + "type" : "owl:Class" + }, { + "id" : "401", + "type" : "owl:Class" + }, { + "id" : "45", + "type" : "owl:Class" + }, { + "id" : "120", + "type" : "owl:Class" + }, { + "id" : "30", + "type" : "owl:Class" + }, { + "id" : "267", + "type" : "owl:Class" + }, { + "id" : "73", + "type" : "owl:Class" + }, { + "id" : "281", + "type" : "owl:Class" + }, { + "id" : "208", + "type" : "owl:Class" + }, { + "id" : "270", + "type" : "owl:Class" + }, { + "id" : "33", + "type" : "owl:Class" + }, { + "id" : "116", + "type" : "owl:Class" + }, { + "id" : "82", + "type" : "owl:Class" + }, { + "id" : "97", + "type" : "owl:Class" + }, { + "id" : "105", + "type" : "owl:Class" + }, { + "id" : "311", + "type" : "owl:Class" + }, { + "id" : "35", + "type" : "owl:Class" + }, { + "id" : "1", + "type" : "owl:Class" + }, { + "id" : "85", + "type" : "owl:Class" + }, { + "id" : "260", + "type" : "owl:Class" + }, { + "id" : "68", + "type" : "owl:Class" + }, { + "id" : "71", + "type" : "owl:Class" + }, { + "id" : "86", + "type" : "owl:Class" + }, { + "id" : "20", + "type" : "owl:Class" + }, { + "id" : "226", + "type" : "owl:Class" + }, { + "id" : "75", + "type" : "owl:Class" + }, { + "id" : "126", + "type" : "owl:Class" + }, { + "id" : "89", + "type" : "owl:Class" + }, { + "id" : "58", + "type" : "owl:Class" + }, { + "id" : "118", + "type" : "owl:Class" + }, { + "id" : "117", + "type" : "owl:Class" + }, { + "id" : "28", + "type" : "owl:Class" + }, { + "id" : "454", + "type" : "owl:Class" + }, { + "id" : "115", + "type" : "owl:Class" + }, { + "id" : "2", + "type" : "owl:Class" + }, { + "id" : "17", + "type" : "owl:Class" + }, { + "id" : "173", + "type" : "owl:Class" + }, { + "id" : "26", + "type" : "owl:Class" + }, { + "id" : "10", + "type" : "owl:Class" + }, { + "id" : "111", + "type" : "owl:Class" + }, { + "id" : "31", + "type" : "owl:Class" + }, { + "id" : "6", + "type" : "owl:Class" + }, { + "id" : "273", + "type" : "owl:Class" + }, { + "id" : "160", + "type" : "owl:Class" + }, { + "id" : "104", + "type" : "owl:Class" + }, { + "id" : "340", + "type" : "rdfs:Literal" + }, { + "id" : "559", + "type" : "rdfs:Literal" + }, { + "id" : "486", + "type" : "rdfs:Literal" + }, { + "id" : "405", + "type" : "rdfs:Literal" + }, { + "id" : "183", + "type" : "owl:Class" + }, { + "id" : "470", + "type" : "rdfs:Literal" + }, { + "id" : "570", + "type" : "rdfs:Literal" + }, { + "id" : "553", + "type" : "rdfs:Literal" + }, { + "id" : "65", + "type" : "owl:Class" + }, { + "id" : "573", + "type" : "rdfs:Literal" + }, { + "id" : "566", + "type" : "rdfs:Literal" + }, { + "id" : "222", + "type" : "rdfs:Literal" + }, { + "id" : "321", + "type" : "owl:Class" + }, { + "id" : "60", + "type" : "owl:Class" + }, { + "id" : "278", + "type" : "owl:Class" + }, { + "id" : "325", + "type" : "owl:Class" + }, { + "id" : "88", + "type" : "owl:Class" + }, { + "id" : "207", + "type" : "owl:Class" + }, { + "id" : "36", + "type" : "owl:Class" + } ], + "classAttribute" : [ { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/E89_Propositional_Object", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "instances" : 0, + "label" : { + "de" : "Aussagenobjekt", + "IRI-based" : "E89_Propositional_Object", + "en" : "Propositional Object", + "zh" : "命题对象" + }, + "subClasses" : [ "5", "6" ], + "comment" : { + "en" : "This class comprises immaterial items, including but not limited to stories, plots, procedural prescriptions, algorithms, laws of physics or images that are, or represent in some sense, sets of propositions about real or imaginary things and that are documented as single units or serve as topic of discourse.\nThis class also comprises items that are “about” something in the sense of a subject. In the wider sense, this class includes expressions of psychological value such as non-figural art and musical themes. However, conceptual items such as types and classes are not instances of E89 Propositional Object. This should not be confused with the definition of a type, which is indeed an instance of E89 Propositional Object." + }, + "attributes" : [ "external" ], + "id" : "3", + "superClasses" : [ "4" ] + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/E87_Curation_Activity", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "instances" : 0, + "label" : { + "de" : "Kuratorische Tätigkeit", + "IRI-based" : "E87_Curation_Activity", + "en" : "Curation Activity", + "zh" : "管理" + }, + "comment" : { + "en" : "This class comprises the activities that result in the continuity of management and the preservation and evolution of instances of E78 Curated Holding, following an implicit or explicit curation plan.\nIt specializes the notion of activity into the curation of a collection and allows the history of curation to be recorded.\nItems are accumulated and organized following criteria like subject, chronological period, material type, style of art etc. and can be added or removed from an instance of E78 Curated Holding for a specific purpose and/or audience. The initial aggregation of items of a collection is regarded as an instance of E12 Production Event while the activity of evolving, preserving and promoting a collection is regarded as an instance of E87 Curation Activity." + }, + "attributes" : [ "external" ], + "id" : "69", + "superClasses" : [ "45" ] + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/E24_Physical_Human-Made_Thing", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "instances" : 0, + "label" : { + "IRI-based" : "E24_Physical_Human-Made_Thing", + "en" : "Physical Human-Made Thing" + }, + "subClasses" : [ "104", "105", "106" ], + "comment" : { + "en" : "This class comprises all persistent physical items of any size that are purposely created by human activity. This class comprises, besides others, Human-Made objects, such as a sword, and Human-Made features, such as rock art. For example, a “cup and ring” carving on bedrock is regarded as instance of E24 Physical Human-Made Thing.\nInstances of Human-Made thing may be the result of modifying pre-existing physical things, preserving larger parts or most of the original matter and structure, which poses the question if they are new or even Human-Made, the respective interventions of production made on such original material should be obvious and sufficient to regard that the product has a new, distinct identity and intended function and is human-made. Substantial continuity of the previous matter and structure in the new product can be documented by describing the production process also as an instance of E81 Transformation.\nWhereas interventions of conservation and repair are not regarded to produce a new Human-Made thing, the results of preparation of natural history specimens that substantially change their natural or original state should be regarded as physical Human-Made things, including the uncovering of petrified biological features from a solid piece of stone. On the other side, scribbling a museum number on a natural object should not be regarded to make it Human-Made. This notwithstanding, parts, sections, segments, or features of a physical Human-Made thing may continue to be non-Human-Made and preserved during the production process, for example natural pearls used as a part of an eardrop." + }, + "attributes" : [ "external" ], + "id" : "41", + "superClasses" : [ "11", "44" ] + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/E55_Type", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "instances" : 0, + "label" : { + "de" : "Typus", + "IRI-based" : "E55_Type", + "ru" : "Тип", + "pt" : "Tipo", + "el" : "Τύπος", + "en" : "Type", + "fr" : "Type", + "zh" : "类型" + }, + "subClasses" : [ "35", "117", "97", "118" ], + "comment" : { + "en" : "This class comprises concepts denoted by terms from thesauri and controlled vocabularies used to characterize and classify instances of CIDOC CRM classes. Instances of E55 Type represent concepts in contrast to instances of E41 Appellation which are used to name instances of CIDOC CRM classes.\nE55 Type is the CIDOC CRM’s interface to domain specific ontologies and thesauri. These can be represented in the CIDOC CRM as subclasses of E55 Type, forming hierarchies of terms, i.e., instances of E55 Type linked via P127 has broader term (has narrower term): E55 Type. Such hierarchies may be extended with additional properties." + }, + "attributes" : [ "external" ], + "id" : "108", + "superClasses" : [ "4" ] + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/E28_Conceptual_Object", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "instances" : 0, + "label" : { + "de" : "Begrifflicher Gegenstand", + "IRI-based" : "E28_Conceptual_Object", + "ru" : "Концептуальный Объект", + "pt" : "Objeto Conceitual", + "el" : "Νοητικό Αντικείμενο", + "en" : "Conceptual Object", + "fr" : "Objet conceptuel", + "zh" : "概念对象" + }, + "subClasses" : [ "132", "3", "108" ], + "comment" : { + "en" : "This class comprises non-material products of our minds and other human produced data that have become objects of a discourse about their identity, circumstances of creation or historical implication. The production of such information may have been supported by the use of technical devices such as cameras or computers.\nCharacteristically, instances of this class are created, invented or thought by someone, and then may be documented or communicated between persons. Instances of E28 Conceptual Object have the ability to exist on more than one particular carrier at the same time, such as paper, electronic signals, marks, audio media, paintings, photos, human memories, etc.\nThey cannot be destroyed. They exist as long as they can be found on at least one carrier or in at least one human memory. Their existence ends when the last carrier and the last memory are lost." + }, + "attributes" : [ "external" ], + "id" : "4", + "superClasses" : [ "44" ] + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/E36_Visual_Item", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "instances" : 0, + "label" : { + "de" : "Bildliches", + "IRI-based" : "E36_Visual_Item", + "ru" : "Визуальный Предмет", + "pt" : "Item Visual", + "el" : "Οπτικό Στοιχείο", + "en" : "Visual Item", + "fr" : "Item visuel", + "zh" : "可视项" + }, + "subClasses" : [ "126", "58", "30" ], + "comment" : { + "en" : "This class comprises the intellectual or conceptual aspects of recognisable marks, images and other visual works.\nThis class does not intend to describe the idiosyncratic characteristics of an individual physical embodiment of a visual item, but the underlying prototype. For example, a mark such as the ICOM logo is generally considered to be the same logo when used on any number of publications. The size, orientation and colour may change, but the logo remains uniquely identifiable. The same is true of images that are reproduced many times. This means that visual items are independent of their physical support.\nThe class E36 Visual Item provides a means of identifying and linking together instances of E24 Physical Human-Made Thing that carry the same visual qualities (symbols, marks or images etc.). The property P62 depicts (is depicted by) between E24 Physical Human-Made Thing and depicted subjects (E1 CRM Entity) is a shortcut of the more fully developed path from E24 Physical Human-Made Thing through P65 shows visual item (is shown by), E36 Visual Item, P138 represents (has representation) to E1CRM Entity, which in addition captures the optical features of the depiction." + }, + "attributes" : [ "external" ], + "id" : "133", + "superClasses" : [ "6" ] + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/E19_Physical_Object", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "instances" : 0, + "label" : { + "de" : "Materieller Gegenstand", + "IRI-based" : "E19_Physical_Object", + "ru" : "Физический Объект", + "pt" : "Objeto Material", + "el" : "Υλικό Αντικείμενο", + "en" : "Physical Object", + "fr" : "Objet matériel", + "zh" : "物质对象" + }, + "subClasses" : [ "135", "106" ], + "comment" : { + "en" : "This class comprises items of a material nature that are units for documentation and have physical boundaries that separate them completely in an objective way from other objects.\nThe class also includes all aggregates of objects made for functional purposes of whatever kind, independent of physical coherence, such as a set of chessmen. Typically, instances of E19 Physical Object can be moved (if not too heavy).\nIn some contexts, such objects, except for aggregates, are also called “bona fide objects” (Smith & Varzi, 2000, pp.401-420), i.e., naturally defined objects.\nThe decision as to what is documented as a complete item, rather than by its parts or components, may be a purely administrative decision or may be a result of the order in which the item was acquired." + }, + "attributes" : [ "external" ], + "id" : "134", + "superClasses" : [ "11" ] + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/E53_Place", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "instances" : 0, + "label" : { + "de" : "Ort", + "IRI-based" : "E53_Place", + "ru" : "Место", + "pt" : "Local", + "el" : "Τόπος", + "en" : "Place", + "fr" : "Lieu", + "zh" : "地点" + }, + "comment" : { + "en" : "This class comprises extents in the natural space we live in, in particular on the surface of the Earth, in the pure sense of physics: independent from temporal phenomena and matter. They may serve describing the physical location of things or phenomena or other areas of interest. Geometrically, instances of E53 Place constitute single contiguous areas or a finite aggregation of disjoint areas in space which are each individually contiguous. They may have fuzzy boundaries.\nThe instances of E53 Place are usually determined by reference to the position of “immobile” objects such as buildings, cities, mountains, rivers, or dedicated geodetic marks, but may also be determined by reference to mobile objects. A Place can be determined by combining a frame of reference and a location with respect to this frame.\nIt is sometimes argued that instances of E53 Place are best identified by global coordinates or absolute reference systems. However, relative references are often more relevant in the context of cultural documentation and tend to be more precise. In particular, we are often interested in position in relation to large, mobile objects, such as ships. For example, the Place at which Nelson died is known with reference to a large mobile object – H.M.S Victory. A resolution of this Place in terms of absolute coordinates would require knowledge of the movements of the vessel and the precise time of death, either of which may be revised, and the result would lack historical and cultural relevance.\nAny instance of E18 Physical Thing can serve as a frame of reference for an instance of E53 Place. This may be documented using the property P157 is at rest relative to (provides reference space for)." + }, + "attributes" : [ "external" ], + "id" : "100", + "superClasses" : [ "40" ] + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/E34_Inscription", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "instances" : 0, + "label" : { + "de" : "Inschrift", + "IRI-based" : "E34_Inscription", + "ru" : "Надпись", + "pt" : "Inscrição", + "el" : "Επιγραφή", + "en" : "Inscription", + "fr" : "Inscription", + "zh" : "题识" + }, + "comment" : { + "en" : "This class comprises recognisable, texts attached to instances of E24 Physical Human-Made Thing.\nThe transcription of the text can be documented in a note by P3 has note: E62 String. The alphabet used can be documented by P2 has type: E55 Type. This class does not intend to describe the idiosyncratic characteristics of an individual physical embodiment of an inscription, but the underlying prototype. The physical embodiment is modelled in the CIDOC CRM as instances of E24 Physical Human-Made Thing.\nThe relationship of a physical copy of a book to the text it contains is modelled using E18 Physical Thing. P128 carries (is carried by): E33 Linguistic Object." + }, + "attributes" : [ "external" ], + "id" : "57", + "superClasses" : [ "33", "58" ] + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/E20_Biological_Object", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "instances" : 0, + "label" : { + "de" : "Biologischer Gegenstand", + "IRI-based" : "E20_Biological_Object", + "ru" : "Биологический Объект", + "pt" : "Objeto Biológico", + "el" : "Βιολογικό Ακτικείμενο", + "en" : "Biological Object", + "fr" : "Objet biologique", + "zh" : "生物对象" + }, + "subClasses" : [ "111" ], + "comment" : { + "en" : "This class comprises individual items of a material nature, which live, have lived or are natural products of or from living organisms.\nArtificial objects that incorporate biological elements, such as Victorian butterfly frames, can be documented as both instances of E20 Biological Object and E22 Human-Made Object." + }, + "attributes" : [ "external" ], + "id" : "135", + "superClasses" : [ "134" ] + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/E42_Identifier", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "instances" : 0, + "label" : { + "de" : "Kennung", + "IRI-based" : "E42_Identifier", + "ru" : "Идентификатор Объекта", + "pt" : "Identificador de Objeto", + "el" : "Κωδικός Αναγνώρισης", + "en" : "Identifier", + "fr" : "Identificateur d'objet", + "zh" : "标识符" + }, + "comment" : { + "en" : "This class comprises strings or codes assigned to instances of E1 CRM Entity in order to identify them uniquely and permanently within the context of one or more organisations. Such codes are often known as inventory numbers, registration codes, etc. and are typically composed of alphanumeric sequences. Postal addresses, telephone numbers, URLs and e-mail addresses are characteristic examples of identifiers used by services transporting things between clients.\nThe class E42 Identifier is not normally used for machine-generated identifiers used for automated processing unless these are also used by human agents." + }, + "attributes" : [ "external" ], + "id" : "157", + "superClasses" : [ "183" ] + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/E32_Authority_Document", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "instances" : 0, + "label" : { + "de" : "Referenzdokument", + "IRI-based" : "E32_Authority_Document", + "ru" : "Официальный Документ", + "pt" : "Documento de Referência", + "el" : "Πηγή Καθιερωμένων Όρων", + "en" : "Authority Document", + "fr" : "Document de référence", + "zh" : "规范文档" + }, + "comment" : { + "en" : "This class comprises encyclopaedia, thesauri, authority lists and other documents that define terminology or conceptual systems for consistent use." + }, + "attributes" : [ "external" ], + "id" : "219", + "superClasses" : [ "220" ] + }, { + "iri" : "http://iflastandards.info/ns/fr/frbr/frbroo/F38_Character", + "baseIri" : "http://iflastandards.info/ns/fr/frbr/frbroo", + "instances" : 0, + "label" : { + "IRI-based" : "F38_Character" + }, + "subClasses" : [ "86" ], + "attributes" : [ "external" ], + "id" : "241" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/E67_Birth", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "instances" : 0, + "label" : { + "de" : "Geburt", + "IRI-based" : "E67_Birth", + "ru" : "Рождение", + "pt" : "Nascimento", + "el" : "Γέννηση", + "en" : "Birth", + "fr" : "Naissance", + "zh" : "出生" + }, + "comment" : { + "en" : "This class comprises the births of human beings. E67 Birth is a biological event focussing on the context of people coming into life. (E63 Beginning of Existence comprises the coming into life of any living being).\nTwins, triplets etc. are typically brought into life by the same instance of E67 Birth. The introduction of E67 Birth as a documentation element allows the description of a range of family relationships in a simple model. Suitable extensions may describe more details and the complexity of motherhood with the intervention of modern medicine. In this model, the biological father is not seen as a necessary participant in the birth." + }, + "attributes" : [ "external" ], + "id" : "15", + "superClasses" : [ "2" ] + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/E25_Man-Made_Feature", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "instances" : 0, + "label" : { + "IRI-based" : "E25_Man-Made_Feature" + }, + "subClasses" : [ "260" ], + "attributes" : [ "external" ], + "id" : "259" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/E35_Title", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "instances" : 0, + "label" : { + "de" : "Titel", + "IRI-based" : "E35_Title", + "ru" : "Заголовок", + "pt" : "Título", + "el" : "Τίτλος", + "en" : "Title", + "fr" : "Titre", + "zh" : "题名" + }, + "comment" : { + "en" : "This class comprises textual strings that within a cultural context can be clearly identified as titles due to their form. Being a subclass of E41 Appellation, E35 Title can only be used when such a string is actually used as a title of a work, such as a text, an artwork, or a piece of music.\nTitles are proper noun phrases or verbal phrases, and should not be confused with generic object names such as “chair”, “painting” or “book” (the latter are common nouns that stand for instances of E55 Type). Titles may be assigned by the creator of the work itself, or by a social group.\nThis class also comprises the translations of titles that are used as surrogates for the original titles in different social contexts." + }, + "attributes" : [ "external" ], + "id" : "265", + "superClasses" : [ "33", "183" ] + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/E68_Dissolution", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "instances" : 0, + "label" : { + "de" : "Gruppenauflösung", + "IRI-based" : "E68_Dissolution", + "ru" : "Роспуск", + "pt" : "Dissolução", + "el" : "Διάλυση Ομάδας", + "en" : "Dissolution", + "fr" : "Dissolution", + "zh" : "解散" + }, + "comment" : { + "en" : "This class comprises the events that result in the formal or informal termination of an instance of E74 Group.\nIf the dissolution was deliberate, the Dissolution event should also be instantiated as an instance of E7 Activity." + }, + "attributes" : [ "external" ], + "id" : "19", + "superClasses" : [ "71" ] + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/E66_Formation", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "instances" : 0, + "label" : { + "de" : "Gruppenbildung", + "IRI-based" : "E66_Formation", + "ru" : "Событие Формирования", + "pt" : "Formação", + "el" : "Συγκρότηση Ομάδας", + "en" : "Formation", + "fr" : "Formation", + "zh" : "组成" + }, + "comment" : { + "en" : "This class comprises events that result in the formation of a formal or informal E74 Group of people, such as a club, society, association, corporation or nation.\nE66 Formation does not include the arbitrary aggregation of people who do not act as a collective.\nThe formation of an instance of E74 Group does not require that the group is populated with members at the time of formation. In order to express the joining of members at the time of formation, the respective activity should be simultaneously an instance of both E66 Formation and E85 Joining." + }, + "attributes" : [ "external" ], + "id" : "63", + "superClasses" : [ "45", "2" ] + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/E18_Physical_Thing", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "instances" : 0, + "label" : { + "de" : "Materielles", + "IRI-based" : "E18_Physical_Thing", + "ru" : "Физическая Вещь", + "pt" : "Coisa Material", + "el" : "Υλικό Πράγμα", + "en" : "Physical Thing", + "fr" : "Chose matérielle", + "zh" : "实物" + }, + "subClasses" : [ "281", "134", "41" ], + "comment" : { + "en" : "This class comprises all persistent physical items with a relatively stable form, human-made or natural.\nDepending on the existence of natural boundaries of such things, the CIDOC CRM distinguishes the instances of E19 Physical Object from instances of E26 Physical Feature, such as holes, rivers, pieces of land etc. Most instances of E19 Physical Object can be moved (if not too heavy), whereas features are integral to the surrounding matter.\nAn instance of E18 Physical Thing occupies not only a particular geometric space at any instant of its existence, but in the course of its existence it also forms a trajectory through spacetime, which occupies a real, that is phenomenal, volume in spacetime. We include in the occupied space the space filled by the matter of the physical thing and all its inner spaces, such as the interior of a box. For the purpose of more detailed descriptions of the presence of an instance of E18 Physical Thing in space and time it can be associated with its specific instance of E92 Spacetime Volume by the property P196 defines (is defined by).\nThe CIDOC CRM is generally not concerned with amounts of matter in fluid or gaseous states, as long as they are not confined in an identifiable way for an identifiable minimal time-span." + }, + "attributes" : [ "external" ], + "id" : "11", + "superClasses" : [ "88" ] + }, { + "iri" : "http://www.w3.org/2002/07/owl#Thing", + "baseIri" : "http://owl2vowl.de", + "id" : "299", + "label" : { + "undefined" : "Thing" + } + }, { + "iri" : "http://www.w3.org/2002/07/owl#Thing", + "baseIri" : "http://owl2vowl.de", + "id" : "51", + "label" : { + "undefined" : "Thing" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "83", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "341", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://w3id.org/vir#PCK4_is_visual_prototype_of", + "baseIri" : "http://w3id.org/vir", + "instances" : 0, + "label" : { + "IRI-based" : "PCK4_is_visual_prototype_of" + }, + "comment" : { + "undefined" : "n-ary construct to document the use of a specific prototypical example for an image. The nature of the relationships helps define a map of relationships between prototypical items used in the arts. To be used together with 'K4.1_prototypical_model'" + }, + "id" : "67", + "superClasses" : [ "68" ] + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "344", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "345", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "346", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "347", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "95", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "333", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "348", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/E31_Document", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "instances" : 0, + "label" : { + "de" : "Dokument", + "IRI-based" : "E31_Document", + "ru" : "Документ", + "pt" : "Documento", + "el" : "Τεκμήριο", + "en" : "Document", + "fr" : "Document", + "zh" : "文献" + }, + "subClasses" : [ "219" ], + "comment" : { + "en" : "This class comprises identifiable immaterial items that make propositions about reality.\nThese propositions may be expressed in text, graphics, images, audiograms, videograms or by other similar means. Documentation databases are regarded as instances of E31 Document. This class should not be confused with the concept “document” in Information Technology, which is compatible with E73 Information Object." + }, + "attributes" : [ "external" ], + "id" : "220", + "superClasses" : [ "6" ] + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/E14_Condition_Assessment", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "instances" : 0, + "label" : { + "de" : "Zustandsfeststellung", + "IRI-based" : "E14_Condition_Assessment", + "ru" : "Оценка Состояния", + "pt" : "Avaliação do Estado Material", + "el" : "Εκτίμηση Κατάστασης", + "en" : "Condition Assessment", + "fr" : "Expertise de l'état matériel", + "zh" : "状态评估" + }, + "comment" : { + "en" : "This class describes the act of assessing the state of preservation of an object during a particular period.\nThe condition assessment may be carried out by inspection, measurement or through historical research. This class is used to document circumstances of the respective assessment that may be relevant to interpret its quality at a later stage, or to continue research on related documents." + }, + "attributes" : [ "external" ], + "id" : "251", + "superClasses" : [ "233" ] + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/E22_Man-Made_Object", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "instances" : 0, + "label" : { + "IRI-based" : "E22_Man-Made_Object" + }, + "attributes" : [ "external" ], + "id" : "355" + }, { + "iri" : "http://www.w3.org/2002/07/owl#Thing", + "baseIri" : "http://owl2vowl.de", + "id" : "392", + "label" : { + "undefined" : "Thing" + } + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/E15_Identifier_Assignment", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "instances" : 0, + "label" : { + "de" : "Kennzeichenzuweisung", + "IRI-based" : "E15_Identifier_Assignment", + "ru" : "Назначение Идентификатора", + "pt" : "Atribuição de Identificador", + "el" : "Απόδοση Αναγνωριστικού", + "en" : "Identifier Assignment", + "fr" : "Attribution d’identificateur", + "zh" : "标识符赋值" + }, + "comment" : { + "en" : "This class comprises activities that result in the allocation of an identifier to an instance of E1 CRM Entity. Instances of E15 Identifier Assignment may include the creation of the identifier from multiple constituents, which themselves may be instances of E41 Appellation. The syntax and kinds of constituents to be used may be declared in a rule constituting an instance of E29 Design or Procedure.\nExamples of such identifiers include Find Numbers, Inventory Numbers, uniform titles in the sense of librarianship and Digital Object Identifiers (DOI). Documenting the act of identifier assignment and deassignment is especially useful when objects change custody or the identification system of an organization is changed. In order to keep track of the identity of things in such cases, it is important to document by whom, when and for what purpose an identifier is assigned to an item.\nThe fact that an identifier is a preferred one for an organisation can be expressed by using the property E1 CRM Entity. P48 has preferred identifier (is preferred identifier of): E42 Identifier. It can better be expressed in a context independent form by assigning a suitable E55 Type, such as “preferred identifier assignment”, to the respective instance of E15 Identifier Assignment via the P2 has type property." + }, + "attributes" : [ "external" ], + "id" : "156", + "superClasses" : [ "233" ] + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/E1_CRM_Entity", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "instances" : 0, + "label" : { + "de" : "CRM Entität", + "IRI-based" : "E1_CRM_Entity", + "ru" : "CRM Сущность", + "pt" : "Entidade CRM", + "el" : "Οντότητα CIDOC CRM", + "en" : "CRM Entity", + "fr" : "Entité CRM", + "zh" : "CRM实体" + }, + "subClasses" : [ "249", "100", "116", "278", "82", "36" ], + "comment" : { + "en" : "This class comprises all things in the universe of discourse of the CIDOC Conceptual Reference Model.\nIt is an abstract concept providing for three general properties:\nIdentification by name or appellation, and in particular by a preferred identifier\nClassification by type, allowing further refinement of the specific subclass an instance belongs to\nAttachment of free text and other unstructured data for the expression of anything not captured by formal properties\nAll other classes within the CIDOC CRM are directly or indirectly specialisations of E1 CRM Entity." + }, + "attributes" : [ "external" ], + "id" : "40" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/E85_Joining", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "instances" : 0, + "label" : { + "de" : "Beitritt", + "IRI-based" : "E85_Joining", + "en" : "Joining", + "zh" : "加入" + }, + "comment" : { + "en" : "This class comprises the activities that result in an instance of E39 Actor becoming a member of an instance of E74 Group. This class does not imply initiative by either party. It may be the initiative of a third party.\nTypical scenarios include becoming a member of a social organisation, becoming employee of a company, marriage, the adoption of a child by a family and the inauguration of somebody into an official position." + }, + "attributes" : [ "external" ], + "id" : "77", + "superClasses" : [ "45" ] + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/E13_Attribute_Assignment", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "instances" : 0, + "label" : { + "de" : "Merkmalszuweisung", + "IRI-based" : "E13_Attribute_Assignment", + "ru" : "Присвоение Атрибута", + "pt" : "Atribuição de Característica", + "el" : "Απόδοση Ιδιοτήτων", + "en" : "Attribute Assignment", + "fr" : "Affectation d'attribut", + "zh" : "属性赋值" + }, + "subClasses" : [ "273", "251", "156", "401" ], + "comment" : { + "en" : "This class comprises the actions of making assertions about one property of an object or any single relation between two items or concepts. The type of the property asserted to hold between two items or concepts can be described by the property P177 assigned property of type (is type of property assigned): E55 Type.\nFor example, the class describes the actions of people making propositions and statements during certain scientific/scholarly procedures, e.g., the person and date when a condition statement was made, an identifier was assigned, the museum object was measured, etc. Which kinds of such assignments and statements need to be documented explicitly in structures of a schema rather than free text, depends on whether this information should be accessible by structured queries.\nThis class allows for the documentation of how the respective assignment came about, and whose opinion it was. Note that all instances of properties described in a knowledge base are the opinion of someone. Per default, they are the opinion of the team maintaining the knowledge base. This fact must not individually be registered for all instances of properties provided by the maintaining team, because it would result in an endless recursion of whose opinion was the description of an opinion. Therefore, the use of instances of E13 Attribute Assignment marks the fact, that the maintaining team is in general neutral to the validity of the respective assertion, but registers someone else’s opinion and how it came about.\nAll properties assigned in such an action can also be seen as directly relating the respective pair of items or concepts. Multiple use of instances of E13 Attribute Assignment may possibly lead to a collection of contradictory values.\nAll cases of properties in this model that are also described indirectly through a subclass of E13 Attribute Assignment are characterised as \"short cuts\" of a path via this subclass. This redundant modelling of two alternative views is preferred because many implementations may have good reasons to model either the action of assertion or the short cut, and the relation between both alternatives can be captured by simple rules." + }, + "attributes" : [ "external" ], + "id" : "233", + "superClasses" : [ "45" ] + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/E92_Spacetime_Volume", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "instances" : 0, + "label" : { + "IRI-based" : "E92_Spacetime_Volume", + "en" : "Spacetime Volume" + }, + "subClasses" : [ "173", "231" ], + "comment" : { + "en" : "This class comprises 4-dimensional point sets (volumes) in physical spacetime (in contrast to mathematical models of it) regardless their true geometric forms. They may derive their identity from being the extent of a material phenomenon or from being the interpretation of an expression defining an extent in spacetime. Intersections of instances of E92 Spacetime Volume, E53 Place and E52 Time-Span are also regarded as instances of E92 Spacetime Volume. An instance of E92 Spacetime Volume is either contiguous or composed of a finite number of contiguous subsets. Its boundaries may be fuzzy due to the properties of the phenomena it derives from or due to the limited precision up to which defining expression can be identified with a real extent in spacetime. The duration of existence of an instance of E92 Spacetime Volume is its projection on time." + }, + "attributes" : [ "external" ], + "id" : "249", + "superClasses" : [ "40" ] + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/E79_Part_Addition", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "instances" : 0, + "label" : { + "de" : "Teilhinzufügung", + "IRI-based" : "E79_Part_Addition", + "ru" : "Добавление Части", + "pt" : "Adição de Parte", + "el" : "Προσθήκη Μερών", + "en" : "Part Addition", + "fr" : "Addition d'élément", + "zh" : "部分增加" + }, + "comment" : { + "en" : "This class comprises activities that result in an instance of E18 Physical Thing being increased, enlarged or augmented by the addition of a part.\nTypical scenarios include the attachment of an accessory, the integration of a component, the addition of an element to an aggregate object, or the accessioning of an object into a curated instance of E78 Curated Holding. Both the E18 Physical Thing being augmented and the E18 Physical Thing that is being added are treated as separate identifiable wholes prior to the instance of E79 Part Addition. Following the addition of parts, the resulting assemblages are treated objectively as single identifiable wholes, made up of constituent or component parts bound together either physically (for example the engine becoming a part of the car), or by sharing a common purpose (such as the 32 chess pieces that make up a chess set). This class of activities forms a basis for reasoning about the history and continuity of identity of objects that are integrated into other objects over time, such as precious gemstones being repeatedly incorporated into different items of jewellery, or cultural artefacts being added to different museum instances of E78 Curated Holding over their lifespan.." + }, + "attributes" : [ "external" ], + "id" : "179", + "superClasses" : [ "267" ] + }, { + "iri" : "http://w3id.org/vir#IC19_Recto", + "baseIri" : "http://w3id.org/vir", + "instances" : 0, + "annotations" : { + "exactMatch" : [ { + "identifier" : "exactMatch", + "language" : "undefined", + "value" : "https://www.wikidata.org/wiki/Q9305022", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "IC19_Recto", + "undefined" : "Recto" + }, + "comment" : { + "undefined" : "The front or face of a single sheet or the right-hand page of an open book. The feature is presents in object such as codex, books, pamphlets, documents, photographs and painting." + }, + "id" : "331", + "superClasses" : [ "281" ] + }, { + "iri" : "http://w3id.org/vir#IC21_Similarity_Statement", + "baseIri" : "http://w3id.org/vir", + "instances" : 0, + "label" : { + "IRI-based" : "IC21_Similarity_Statement", + "undefined" : "Similarity Statement" + }, + "comment" : { + "undefined" : "The activity of associating two or more symbolic objects (representation, text, characters, musical score, identifiable structure) using one or more dimension of resemblances between each other. The similarity encoded here is always the result of a thought process performed by an agent, whatever source he may use (his vision, the result of a computed operation, secondary sources) and it is always to be considered belonging to the domain of the visual. The encoding of other type of similarities should use other constructs. Qualities used to assess and state the resemblance are to be encoded as a E55 Type." + }, + "id" : "25", + "superClasses" : [ "26" ] + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/E30_Right", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "instances" : 0, + "label" : { + "de" : "Recht", + "IRI-based" : "E30_Right", + "ru" : "Право", + "pt" : "Direitos", + "el" : "Δικαίωμα", + "en" : "Right", + "fr" : "Droit", + "zh" : "权限" + }, + "comment" : { + "en" : "This class comprises legal privileges concerning material and immaterial things or their derivatives.\nThese include reproduction and property rights." + }, + "attributes" : [ "external" ], + "id" : "5", + "superClasses" : [ "3" ] + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/E22_Human-Made_Object", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "instances" : 0, + "label" : { + "IRI-based" : "E22_Human-Made_Object", + "en" : "Human-Made Object" + }, + "comment" : { + "en" : "This class comprises all persistent physical objects of any size that are purposely created by human activity and have physical boundaries that separate them completely in an objective way from other objects.\nThe class also includes all aggregates of objects made for functional purposes of whatever kind, independent of physical coherence, such as a set of chessmen." + }, + "attributes" : [ "external" ], + "id" : "106", + "superClasses" : [ "134", "41" ] + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/E90_Symbolic_Object", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "instances" : 0, + "label" : { + "de" : "Symbolisches Objekt", + "IRI-based" : "E90_Symbolic_Object", + "en" : "Symbolic Object", + "zh" : "符号对象" + }, + "subClasses" : [ "183", "6" ], + "comment" : { + "en" : "This class comprises identifiable symbols and any aggregation of symbols, such as characters, identifiers, traffic signs, emblems, texts, data sets, images, musical scores, multimedia objects, computer program code or mathematical formulae that have an objectively recognizable structure and that are documented as single units.\nIt includes sets of signs of any nature, which may serve to designate something, or to communicate some propositional content. An instance of E90 Symbolic Object may or may not have a specific meaning, for example an arbitrary character string.\nIn some cases, the content of an instance of E90 Symbolic Object may completely be represented by a serialized digital content model, such as a sequence of ASCII-encoded characters, an XML or HTML document, or a TIFF image. The property P3 has note and its subproperty P190 has symbolic content allow for the description of this content model. In order to disambiguate which symbolic level is the carrier of the meaning, the property P3.1 has type can be used to specify the encoding (e.g., \"bit\", \"Latin character\", RGB pixel)." + }, + "attributes" : [ "external" ], + "id" : "132", + "superClasses" : [ "4", "88" ] + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/E65_Creation", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "instances" : 0, + "label" : { + "de" : "Begriffliche Schöpfung", + "IRI-based" : "E65_Creation", + "ru" : "Событие Творения", + "pt" : "Criação", + "el" : "Δημιουργία", + "en" : "Creation", + "fr" : "Création", + "zh" : "创建" + }, + "subClasses" : [ "311" ], + "comment" : { + "en" : "This class comprises events that result in the creation of conceptual items or immaterial products, such as legends, poems, texts, music, images, movies, laws, types etc." + }, + "attributes" : [ "external" ], + "id" : "8", + "superClasses" : [ "45", "2" ] + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/E71_Human-Made_Thing", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "instances" : 0, + "label" : { + "IRI-based" : "E71_Human-Made_Thing", + "en" : "Human-Made Thing" + }, + "subClasses" : [ "4", "41" ], + "comment" : { + "en" : "This class comprises discrete, identifiable human-made items that are documented as single units.\nThese items are either intellectual products or human-made physical things, and are characterized by relative stability. They may for instance have a solid physical form, an electronic encoding, or they may be logical concepts or structures." + }, + "attributes" : [ "external" ], + "id" : "44", + "superClasses" : [ "89" ] + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/E5_Event", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "instances" : 0, + "label" : { + "de" : "Ereignis", + "IRI-based" : "E5_Event", + "ru" : "Событие", + "pt" : "Evento", + "el" : "Συμβάν", + "en" : "Event", + "fr" : "Événement", + "zh" : "事件" + }, + "subClasses" : [ "71", "45", "2" ], + "comment" : { + "en" : "This class comprises distinct, delimited and coherent processes and interactions of a material nature, in cultural, social or physical systems, involving and affecting instances of E77 Persistent Item in a way characteristic of the kind of process. Typical examples are meetings, births, deaths, actions of decision taking, making or inventing things, but also more complex and extended ones such as conferences, elections, building of a castle, or battles.\nWhile the continuous growth of a tree lacks the limits characteristic of an event, its germination from a seed does qualify as an event. Similarly, the blowing of the wind lacks the distinctness and limits of an event, but a hurricane, flood or earthquake would qualify as an event. Mental processes are considered as events, in cases where they are connected with the material externalization of their results; for example, the creation of a poem, a performance or a change of intention that becomes obvious from subsequent actions or declarations.\nThe effects of an instance of E5 Event may not lead to relevant permanent changes of properties or relations of the items involved in it, for example an unrecorded performance. Of course, in order to be documented, some kind of evidence for an event must exist, be it witnesses, traces or products of the event.\nWhile instances of E4 Period always require some form of coherence between its constituent phenomena, in addition, the essential constituents of instances of E5 Event should contribute to an overall effect; for example, the statements made during a meeting and the listening of the audience.\nViewed at a coarse level of detail, an instance of E5 Event may appear as if it had an ‘instantaneous’ overall effect, but any process or interaction of material nature in reality have an extent in time and space. At a fine level, instances of E5 Event may be analysed into component phenomena and phases within a space and timeframe, and as such can be seen as a period, regardless of the size of the phenomena. The reverse is not necessarily the case: not all instances of E4 Period give rise to a noteworthy overall effect and are thus not instances of E5 Event." + }, + "attributes" : [ "external" ], + "id" : "198", + "superClasses" : [ "231" ] + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/E4_Period", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "instances" : 0, + "label" : { + "de" : "Phase", + "IRI-based" : "E4_Period", + "ru" : "Период", + "pt" : "Período", + "el" : "Περίοδος", + "en" : "Period", + "fr" : "Période", + "zh" : "时期" + }, + "subClasses" : [ "198" ], + "comment" : { + "en" : "This class comprises sets of coherent phenomena or cultural manifestations occurring in time and space.\nIt is the social or physical coherence of these phenomena that identify an instance of E4 Period and not the associated spatiotemporal extent. This extent is only the “ground” or space in an abstract physical sense that the actual process of growth, spread and retreat has covered. Consequently, different periods can overlap and coexist in time and space, such as when a nomadic culture exists in the same area and time as a sedentary culture. This also means that overlapping land use rights, common among first nations, amounts to overlapping periods.\nOften, this class is used to describe prehistoric or historic periods such as the “Neolithic Period”, the “Ming Dynasty” or the “McCarthy Era”, but also geopolitical units and activities of settlements are regarded as special cases of E4 Period. However, there are no assumptions about the scale of the associated phenomena. In particular all events are seen as synthetic processes consisting of coherent phenomena. Therefore, E4 Period is a superclass of E5 Event. For example, a modern clinical birth, an instance of E67 Birth, can be seen as both a single event, i.e., an instance of E5 Event, and as an extended period, i.e., an instance of E4 Period, that consists of multiple physical processes and complementary activities performed by multiple instances of E39 Actor.\nAs the actual extent of an instance of E4 Period in spacetime we regard the trajectories of the participating physical things during their participation in an instance of E4 Period. This includes the open spaces via which these things have interacted and the spaces by which they had the potential to interact during that period or event in the way defined by the type of the respective period or event. Examples include the air in a meeting room transferring the voices of the participants. Since these phenomena are fuzzy, we assume the spatiotemporal extent to be contiguous, except for cases of phenomena spreading out over islands or other separated areas, including geopolitical units distributed over disconnected areas such as islands or colonies.\nWhether the trajectories necessary for participants to travel between these areas are regarded as part of the spatiotemporal extent or not has to be decided in each case based on a concrete analysis, taking use of the sea for other purposes than travel, such as fishing, into consideration. One may also argue that the activities to govern disconnected areas imply travelling through spaces connecting them and that these areas hence are spatially connected in a way, but it appears counterintuitive to consider for instance travel routes in international waters as extensions of geopolitical units.\nConsequently, an instance of E4 Period may occupy a number of disjoint spacetime volumes, however there must not be a discontinuity in the time-span covered by these spacetime volumes. This means that an instance of E4 Period must be contiguous in time. If it has ended in all areas, it has ended as a whole. However, it may end in one area before another, such as in the Polynesian migration, and it continues as long as it is ongoing in at least one area.\nWe model E4 Period as a subclass of E2 Temporal Entity and of E92 Spacetime Volume. The latter is intended as a phenomenal spacetime volume as defined in CIDOC CRMgeo (Doerr & Hiebel, 2013). By virtue of this multiple inheritance, we can discuss the physical extent of an instance of E4 Period without representing each instance of it together with an instance of its associated spacetime volume. This model combines two quite different kinds of substance: an instance of E4 Period is a phenomenon while an instance of E92 Spacetime Volume is an aggregation of points in spacetime. However, the real spatiotemporal extent of an instance of E4 Period is regarded to be unique to it due to all its details and fuzziness; its identity and existence depends uniquely on the identity of the instance of E4 Period. Therefore, this multiple inheritance is unambiguous and effective and furthermore corresponds to the intuitions of natural language.\nTypical use of this class in cultural heritage documentation is for documenting cultural and artistic periods. There are two different conceptualisations of ‘artistic style’, defined either by physical features or by historical context. For example, “Impressionism” can be viewed as a period in the European sphere of influence lasting from approximately 1870 to 1905 during which paintings with particular characteristics were produced by a group of artists that included (among others) Monet, Renoir, Pissarro, Sisley and Degas. Alternatively, it can be regarded as a style applicable to all paintings sharing the characteristics of the works produced by the Impressionist painters, regardless of historical context. The first interpretation is an instance of E4 Period, and the second defines morphological object types that fall under E55 Type.\nA geopolitical unit as a specific case of an instance of E4 Period is the set of activities and phenomena related to the claim of power, the consequences of belonging to a jurisdictional area and an administrative system that establishes a geopolitical unit. Examples from the modern period are countries or administrative areas of countries such as districts whose actions and structures define activities and phenomena in the area that they intend to govern. The borders of geopolitical units are often defined in contracts or treaties although they may deviate from the actual practice. The spatiotemporal properties of Geopolitical units can be modelled through the properties inherited from E92 Spacetime Volume.\nAnother specific case of an instance of E4 Period is the actual extent of the set of activities and phenomena as evidenced by their physical traces that define a settlement, such as the populated period of Nineveh." + }, + "attributes" : [ "external" ], + "id" : "231", + "superClasses" : [ "249", "116" ] + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/E39_Actor", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "instances" : 0, + "label" : { + "de" : "Akteur", + "IRI-based" : "E39_Actor", + "ru" : "Агент", + "pt" : "Agente", + "el" : "Δράστης", + "en" : "Actor", + "fr" : "Agent", + "zh" : "参与者" + }, + "subClasses" : [ "20", "111" ], + "comment" : { + "en" : "This class comprises people, either individually or in groups, who have the potential to perform intentional actions of kinds for which someone may be held responsible." + }, + "attributes" : [ "external" ], + "id" : "78", + "superClasses" : [ "278" ] + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/E17_Type_Assignment", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "instances" : 0, + "label" : { + "de" : "Typuszuweisung", + "IRI-based" : "E17_Type_Assignment", + "ru" : "Присвоение Типа", + "pt" : "Atribuição de Tipo", + "el" : "Απόδοση Τύπου", + "en" : "Type Assignment", + "fr" : "Attribution de type", + "zh" : "类型赋值" + }, + "comment" : { + "en" : "This class comprises the actions of classifying items of whatever kind. Such items include objects, specimens, people, actions and concepts.\nThis class allows for the documentation of the context of classification acts in cases where the value of the classification depends on the personal opinion of the classifier, and the date that the classification was made. This class also encompasses the notion of \"determination,\" i.e., the systematic and molecular identification of a specimen in biology." + }, + "attributes" : [ "external" ], + "id" : "401", + "superClasses" : [ "233" ] + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/E7_Activity", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "instances" : 0, + "label" : { + "de" : "Handlung", + "IRI-based" : "E7_Activity", + "ru" : "Деятельность", + "pt" : "Atividade", + "el" : "Δράση", + "en" : "Activity", + "fr" : "Activité", + "zh" : "活动" + }, + "subClasses" : [ "226", "63", "69", "77", "8", "60", "160", "120", "233", "267" ], + "comment" : { + "en" : "This class comprises actions intentionally carried out by instances of E39 Actor that result in changes of state in the cultural, social, or physical systems documented.\nThis notion includes complex, composite and long-lasting actions such as the building of a settlement or a war, as well as simple, short-lived actions such as the opening of a door." + }, + "attributes" : [ "external" ], + "id" : "45", + "superClasses" : [ "198" ] + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/E10_Transfer_of_Custody", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "instances" : 0, + "label" : { + "de" : "Übertragung des Gewahrsams", + "IRI-based" : "E10_Transfer_of_Custody", + "ru" : "Передача Опеки", + "pt" : "Transferência de Custódia", + "el" : "Μεταβίβαση Κατοχής", + "en" : "Transfer of Custody", + "fr" : "Changement de détenteur", + "zh" : "转移监护权" + }, + "comment" : { + "en" : "This class comprises transfers of the physical custody or the legal responsibility for the physical custody of objects. The recording of the donor or recipient is optional. It is possible that in an instance of E10 Transfer of Custody there is either no donor or no recipient.\nDepending on the circumstances, it may describe:\n1. the beginning of custody (there is no previous custodian)\n2. the end of custody (there is no subsequent custodian)\n3. the transfer of custody (transfer from one custodian to the next)\n4. the receipt of custody from an unknown source (the previous custodian is unknown)\n5. the declared loss of an object (the current or subsequent custodian is unknown)\nIn the event that only a single kind of transfer of custody occurs, either the legal responsibility for the custody or the actual physical possession of the object but not both, this difference should be expressed using the property P2 has type (is type of).\nThe sense of physical possession requires that the object of custody be in the hands of the keeper at least with a part representative for the whole. The way, in which a representative part is defined, should ensure that it is unambiguous who keeps a part and who the whole and should be consistent with the identity criteria of the kept instance of E18 Physical Thing.\nThe interpretation of the museum notion of \"accession\" differs between institutions. The CIDOC CRM therefore models legal ownership and physical custody separately. Institutions will then model their specific notions of accession and deaccession as combinations of these.\nTheft is a specific case of illegal transfer of custody." + }, + "attributes" : [ "external" ], + "id" : "120", + "superClasses" : [ "45" ] + }, { + "iri" : "http://w3id.org/vir#IC10_Attribute", + "baseIri" : "http://w3id.org/vir", + "instances" : 0, + "annotations" : { + "closeMatch" : [ { + "identifier" : "closeMatch", + "language" : "undefined", + "value" : "https://www.wikidata.org/wiki/Q204231", + "type" : "iri" + }, { + "identifier" : "closeMatch", + "language" : "undefined", + "value" : "http://dbpedia.org/ontology/iconographicAttributes", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "IC10_Attribute", + "undefined" : "Iconographical Attribute" + }, + "comment" : { + "undefined" : "A set of features considered by a viewer more salient than others and used as a key for the identification of a Representation. The attribute could correspond to iconographical elements or simple signs which the viewer uses to provide a stable identity to a visual object." + }, + "id" : "30", + "superClasses" : [ "133", "31" ] + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/E11_Modification", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "instances" : 0, + "label" : { + "de" : "Bearbeitung", + "IRI-based" : "E11_Modification", + "ru" : "Событие Изменения", + "pt" : "Modificação", + "el" : "Τροποποίηση", + "en" : "Modification", + "fr" : "Modification", + "zh" : "修改" + }, + "subClasses" : [ "179", "1", "10" ], + "comment" : { + "en" : "This class comprises instances of E7 Activity that are undertaken to create, alter or change instances of E24 Physical Human-Made Thing.\nThis class includes the production of an item from raw materials and other so far undocumented objects. It also includes the conservation treatment of an object.\nSince the distinction between modification and production is not always clear, modification is regarded as the more generally applicable concept. This implies that some items may be consumed or destroyed in an instance of E11 Modification, and that others may be produced as a result of it. An event should also be documented using an instance of E81 Transformation if it results in the destruction of one or more objects and the simultaneous production of others using parts or material from the originals. In this case, the new items have separate identities.\nAn activity undertaken on an object which was designed to alter it, but which, in fact, it did not in any seemingly significant way (such as the application of a solvent during conservation which failed to dissolve any part of the object), is still considered as an instance of E11 Modification. Typically, any such activity will leave at least forensic traces of evidence on the object.\nIf the instance of E29 Design or Procedure utilized for the modification prescribes the use of specific materials, they should be documented using property P68 foresees use of (use foreseen by): E57 Material of E29 Design or Procedure, rather than via P126 employed (was employed in): E57 Material." + }, + "attributes" : [ "external" ], + "id" : "267", + "superClasses" : [ "45" ] + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/E6_Destruction", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "instances" : 0, + "label" : { + "de" : "Zerstörung", + "IRI-based" : "E6_Destruction", + "ru" : "Разрушение", + "pt" : "Destruição", + "el" : "Καταστροφή", + "en" : "Destruction", + "fr" : "Destruction", + "zh" : "破坏" + }, + "comment" : { + "en" : "This class comprises events that destroy one or more instances of E18 Physical Thing such that they lose their identity as the subjects of documentation.\nSome destruction events are intentional, while others are independent of human activity. Intentional destruction may be documented by classifying the event as both an instance of E6 Destruction and of E7 Activity.\nThe decision to document an object as destroyed, transformed or modified is context sensitive:\n1. If the matter remaining from the destruction is not documented, the event is modelled solely as an instance of E6 Destruction.\n2. An event should also be documented as an instance of E81 Transformation if it results in the destruction of one or more objects and the simultaneous production of others using parts or material from the original. In this case, the new items have separate identities. Matter is preserved, but identity is not.\n3. When the initial identity of the changed instance of E18 Physical Thing is preserved, the event should be documented as an instance of E11 Modification." + }, + "attributes" : [ "external" ], + "id" : "73", + "superClasses" : [ "71" ] + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/E26_Physical_Feature", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "instances" : 0, + "label" : { + "de" : "Materielles Merkmal", + "IRI-based" : "E26_Physical_Feature", + "ru" : "Физический Признак", + "pt" : "Característica Material", + "el" : "Υλικό Μόρφωμα", + "en" : "Physical Feature", + "fr" : "Caractéristique matérielle", + "zh" : "物理特征" + }, + "subClasses" : [ "331", "454", "105", "325" ], + "comment" : { + "en" : "This class comprises identifiable features that are physically attached in an integral way to particular physical objects.\nInstances of E26 Physical Feature share many of the attributes of instances of E19 Physical Object. They may have a one-, two- or three-dimensional geometric extent, but there are no natural borders that separate them completely in an objective way from the carrier objects. For example, a doorway is a feature but the door itself, being attached by hinges, is not.\nInstances of E26 Physical Feature can be features in a narrower sense, such as scratches, holes, reliefs, surface colours, reflection zones in an opal crystal or a density change in a piece of wood. In the wider sense, they are portions of particular objects with partially imaginary borders, such as the core of the Earth, an area of property on the surface of the Earth, a landscape or the head of a contiguous marble statue. They can be measured and dated, and it is sometimes possible to state who or what is or was responsible for them. They cannot be separated from the carrier object, but a segment of the carrier object may be identified (or sometimes removed) carrying the complete feature.\nThis definition coincides with the definition of \"fiat objects\" (Smith & Varzi, 2000, pp.401-420), with the exception of aggregates of “bona fide objects”." + }, + "attributes" : [ "external" ], + "id" : "281", + "superClasses" : [ "11" ] + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/E96_Purchase", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "instances" : 0, + "label" : { + "IRI-based" : "E96_Purchase", + "en" : "Purchase" + }, + "comment" : { + "en" : "This class comprises transfers of legal ownership from one or more instances of E39 Actor to one or more different instances of E39 Actor, where the transferring party is completely compensated by the payment of a monetary amount. In more detail, a purchase agreement establishes a fixed monetary obligation at its initialization on the receiving party, to the giving party. An instance of E96 Purchase begins with the contract or equivalent agreement and ends with the fulfilment of all contractual obligations. In the case that the activity is abandoned before both parties have fulfilled these obligations, the activity is not regarded as an instance of E96 Purchase.\nThis class is a very specific case of the much more complex social business practices of exchange of goods and the creation and satisfaction of related social obligations. Purchase activities which define individual sales prices per object can be modelled by instantiating E96 Purchase for each object individually and as part of an overall instance of E96 Purchase transaction." + }, + "attributes" : [ "external" ], + "id" : "208", + "superClasses" : [ "60" ] + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/E33_E41_Linguistic_Appellation", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "instances" : 0, + "label" : { + "IRI-based" : "E33_E41_Linguistic_Appellation", + "en" : "Linguistic Appellation" + }, + "attributes" : [ "external" ], + "id" : "270", + "superClasses" : [ "33", "183" ] + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/E33_Linguistic_Object", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "instances" : 0, + "label" : { + "de" : "Sprachlicher Gegenstand", + "IRI-based" : "E33_Linguistic_Object", + "ru" : "Линвистический Объект", + "pt" : "Objeto Lingüístico", + "el" : "Γλωσσικό Αντικείμενο", + "en" : "Linguistic Object", + "fr" : "Objet linguistique", + "zh" : "语言对象" + }, + "subClasses" : [ "270", "57", "265" ], + "comment" : { + "en" : "This class comprises identifiable expressions in natural language or languages.\nInstances of E33 Linguistic Object can be expressed in many ways: e.g., as written texts, recorded speech or sign language. However, the CIDOC CRM treats instances of E33 Linguistic Object independently from the medium or method by which they are expressed. Expressions in formal languages, such as computer code or mathematical formulae, are not treated as instances of E33 Linguistic Object by the CIDOC CRM. These should be modelled as instances of E73 Information Object.\nIn general, an instance of E33 Linguistic Object may also contain non-linguistic information, often of artistic or aesthetic value. Only in cases in which the content of an instance of E33 Linguistic Object can completely be expressed by a series of binary-encoded symbols, its content may be documented within a respective knowledge base by the property P190 has symbolic content: E62 String. Otherwise, it should be understood as an identifiable digital resource only available independently from the respective knowledge base.\nIn other cases, such as pages of an illuminated manuscript or recordings containing speech in a language supported by a writing system, the linguistic part of the content of an instance of E33 Linguistic Object may be documented within a respective knowledge base in a note by P3 has note: E62 String. Otherwise, it may be described using the property P165 incorporates (is incorporated in): E73 Information Object as a different object with its own identity." + }, + "attributes" : [ "external" ], + "id" : "33", + "superClasses" : [ "6" ] + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/E2_Temporal_Entity", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "instances" : 0, + "label" : { + "de" : "Geschehendes", + "IRI-based" : "E2_Temporal_Entity", + "ru" : "Временная Сущность", + "pt" : "Entidade Temporal", + "el" : "Έγχρονη Οντότητα", + "en" : "Temporal Entity", + "fr" : "Entité temporelle", + "zh" : "时序实体" + }, + "subClasses" : [ "231", "115" ], + "comment" : { + "en" : "This class comprises all phenomena, such as the instances of E4 Periods and E5 Events, which happen over a limited extent in time. This extent in time must be contiguous, i.e., without gaps. In case the defining kinds of phenomena for an instance of E2 Temporal Entity cease to happen, and occur later again at another time, we regard that the former instance of E2 Temporal Entity has ended and a new instance has come into existence. In more intuitive terms, the same event cannot happen twice.\nIn some contexts, such phenomena are also called perdurants. This class is disjoint from E77 Persistent Item and is an abstract class that typically has no direct instances. E2 Temporal Entity is specialized into E4 Period, which applies to a particular geographic area (defined with a greater or lesser degree of precision), and E3 Condition State, which applies to instances of E18 Physical Thing." + }, + "attributes" : [ "external" ], + "id" : "116", + "superClasses" : [ "40" ] + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/E52_Time-Span", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "instances" : 0, + "label" : { + "de" : "Zeitspanne", + "IRI-based" : "E52_Time-Span", + "ru" : "Интервал Времени", + "pt" : "Período de Tempo", + "el" : "Χρονικό Διάστημα", + "en" : "Time-Span", + "fr" : "Durée", + "zh" : "时段" + }, + "comment" : { + "en" : "This class comprises abstract temporal extents, in the sense of Galilean physics, having a beginning, an end and a duration.\nInstances of E52 Time-Span have no semantic connotations about phenomena happening within the temporal extent they represent. They do not convey any meaning other than a positioning on the “time-line” of chronology. The actual extent of an instance of E52 Time-Span can be approximated by properties of E52 Time-Span giving inner and outer bounds in the form of dates (instances of E61 Time Primitive). Comparing knowledge about time-spans is fundamental for chronological reasoning.\nSome instances of E52 Time-Span may be defined as the actual, in principle observable, temporal extent of instances of E2 Temporal Entity via the property P4 has time-span (is time-span of): E52 Time-Span. They constitute phenomenal time-spans as defined in CRMgeo (Doerr & Hiebel 2013). Since our knowledge of history is imperfect and physical phenomena are fuzzy in nature, the extent of phenomenal time-spans can only be described in approximation. An extreme case of approximation, might, for example, define an instance of E52 Time-Span having unknown beginning, end and duration. It may, nevertheless, be associated with other descriptions by which we can infer knowledge about it, such as in relative chronologies.\nSome instances of E52 may be defined precisely as representing a declaration of a temporal extent, as, for instance, done in a business contract. They constitute declarative time-spans as defined in CRMgeo (Doerr & Hiebel 2013) and can be described via the property E61 Time Primitive P170 defines time (time is defined by): E52 Time-Span.\nWhen used as a common E52 Time-Span for two events, it will nevertheless describe them as being simultaneous, even if nothing else is known." + }, + "attributes" : [ "external" ], + "id" : "82", + "superClasses" : [ "40" ] + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/E57_Material", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "instances" : 0, + "label" : { + "de" : "Material", + "IRI-based" : "E57_Material", + "ru" : "Материал", + "pt" : "Material", + "el" : "Υλικό", + "en" : "Material", + "fr" : "Matériau", + "zh" : "材质" + }, + "comment" : { + "en" : "This class is a specialization of E55 Type and comprises the concepts of materials.\nInstances of E57 Material may denote properties of matter before its use, during its use, and as incorporated in an object, such as ultramarine powder, tempera paste, reinforced concrete. Discrete pieces of raw-materials kept in museums, such as bricks, sheets of fabric, pieces of metal, should be modelled individually in the same way as other objects. Discrete used or processed pieces, such as the stones from Nefer Titi's temple, should be modelled as parts (cf. P46 is composed of (forms part of): E18 Physical Thing).\nThis type is used categorically in the model without reference to instances of it, i.e., the Model does not foresee the description of instances of instances of E57 Material, e.g.: “instances of gold”.\nIt is recommended that internationally or nationally agreed codes and terminology are used." + }, + "attributes" : [ "external" ], + "id" : "97", + "superClasses" : [ "108" ] + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/E25_Human-Made_Feature", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "instances" : 0, + "label" : { + "IRI-based" : "E25_Human-Made_Feature", + "en" : "Human-Made Feature" + }, + "comment" : { + "en" : "This class comprises physical features that are purposely created by human activity, such as scratches, artificial caves, artificial water channels, etc. In particular, it includes the information encoding features on mechanical or digital carriers." + }, + "attributes" : [ "external" ], + "id" : "105", + "superClasses" : [ "281", "41" ] + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/E83_Type_Creation", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "instances" : 0, + "label" : { + "de" : "Typuserfindung", + "IRI-based" : "E83_Type_Creation", + "ru" : "Создание Типа", + "pt" : "Criação de Tipo", + "el" : "Δημιουργία Τύπου", + "en" : "Type Creation", + "fr" : "Création de type", + "zh" : "类型创建" + }, + "comment" : { + "en" : "This class comprises activities formally defining new types of items.\nIt is typically a rigorous scholarly or scientific process that ensures a type is exhaustively described and appropriately named. In some cases, particularly in archaeology and the life sciences, E83 Type Creation requires the identification of an exemplary specimen and the publication of the type definition in an appropriate scholarly forum. The activity modelled as an instance of E83 Type Creation is central to research in the life sciences, where a type would be referred to as a “taxon,” the type description as a “protologue,” and the exemplary specimens as “original element” or “holotype”." + }, + "attributes" : [ "external" ], + "id" : "311", + "superClasses" : [ "8" ] + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/E58_Measurement_Unit", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "instances" : 0, + "label" : { + "de" : "Maßeinheit", + "IRI-based" : "E58_Measurement_Unit", + "ru" : "Единица Измерения", + "pt" : "Unidade de Medida", + "el" : "Μονάδα Μέτρησης", + "en" : "Measurement Unit", + "fr" : "Unité de mesure", + "zh" : "测量单位" + }, + "subClasses" : [ "65" ], + "comment" : { + "en" : "This class is a specialization of E55 Type and comprises the types of measurement units: feet, inches, centimetres, litres, lumens, etc.\nThis type is used categorically in the model without reference to instances of it, i.e., the Model does not foresee the description of instances of instances of E58 Measurement Unit, e.g.: “instances of cm”.\nSystème International (SI) units or internationally recognized non-SI terms should be used whenever possible, such as those defined by ISO80000:2009. Archaic Measurement Units used in historical records should be preserved." + }, + "attributes" : [ "external" ], + "id" : "35", + "superClasses" : [ "108" ] + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/E12_Production", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "instances" : 0, + "label" : { + "de" : "Herstellung", + "IRI-based" : "E12_Production", + "ru" : "Событие Производства", + "pt" : "Produção", + "el" : "Παραγωγή", + "en" : "Production", + "fr" : "Production", + "zh" : "生产" + }, + "comment" : { + "en" : "This class comprises activities that are designed to, and succeed in, creating one or more new items.\nIt specializes the notion of modification into production. The decision as to whether or not an object is regarded as new is context sensitive. Normally, items are considered “new” if there is no obvious overall similarity between them and the consumed items and material used in their production. In other cases, an item is considered “new” because it becomes relevant to documentation by a modification. For example, the scribbling of a name on a potsherd may make it a voting token. The original potsherd may not be worth documenting, in contrast to the inscribed one.\nThis entity can be collective: the printing of a thousand books, for example, would normally be considered a single event.\nAn event should also be documented using an instance of E81 Transformation if it results in the destruction of one or more objects and the simultaneous production of others using parts or material from the originals. In this case, the new items have separate identities and matter is preserved, but identity is not." + }, + "attributes" : [ "external" ], + "id" : "1", + "superClasses" : [ "2", "267" ] + }, { + "iri" : "http://w3id.org/vir#IC11_Personification", + "baseIri" : "http://w3id.org/vir", + "instances" : 0, + "annotations" : { + "closeMatch" : [ { + "identifier" : "closeMatch", + "language" : "undefined", + "value" : "https://www.wikidata.org/wiki/Q207174", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "IC11_Personification", + "undefined" : "Personification" + }, + "comment" : { + "undefined" : "A human, or anthropomorphic figure, that represents an abstract idea or a concept" + }, + "id" : "85", + "superClasses" : [ "86" ] + }, { + "iri" : "http://w3id.org/vir#IC1_Iconographical_Atom", + "baseIri" : "http://w3id.org/vir", + "instances" : 0, + "label" : { + "IRI-based" : "IC1_Iconographical_Atom", + "undefined" : "Iconographical Atom" + }, + "comment" : { + "undefined" : "An Iconographical Atom is a physical arrangement of forms and colours created by human activity" + }, + "id" : "260", + "superClasses" : [ "259" ] + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/PC0_Typed_CRM_Property", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "instances" : 0, + "label" : { + "IRI-based" : "PC0_Typed_CRM_Property" + }, + "subClasses" : [ "67" ], + "attributes" : [ "external" ], + "id" : "68" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/E64_End_of_Existence", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "instances" : 0, + "label" : { + "de" : "Daseinsende", + "IRI-based" : "E64_End_of_Existence", + "ru" : "Конец Существования", + "pt" : "Fim da Existência", + "el" : "Τέλος Ύπαρξης", + "en" : "End of Existence", + "fr" : "Fin d'existence", + "zh" : "结束" + }, + "subClasses" : [ "19", "73", "75", "17" ], + "comment" : { + "en" : "This class comprises events that end the existence of any instance of E77 Persistent Item.\nIt may be used for temporal reasoning about things (physical items, groups of people, living beings) ceasing to exist; it serves as a hook for determination of a “terminus post quem” or “terminus ante quem”. In cases where substance from an instance of E77 Persistent Item continues to exist in a new form, the process would be documented as instances of E81 Transformation." + }, + "attributes" : [ "external" ], + "id" : "71", + "superClasses" : [ "198" ] + }, { + "iri" : "http://w3id.org/vir#IC16_Character", + "baseIri" : "http://w3id.org/vir", + "instances" : 0, + "label" : { + "IRI-based" : "IC16_Character", + "undefined" : "Character" + }, + "subClasses" : [ "85" ], + "comment" : { + "undefined" : "This class comprises fictional individuals, or groups, appearing in a representation. Each character portrayed can have a type, for example 'Saint' or 'layman'. Every saint portrayed is considered here as a character and not as an actor." + }, + "id" : "86", + "superClasses" : [ "241" ] + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/E74_Group", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "instances" : 0, + "label" : { + "de" : "Menschliche Gruppe", + "IRI-based" : "E74_Group", + "ru" : "Группа", + "pt" : "Grupo", + "el" : "Ομάδα", + "en" : "Group", + "fr" : "Groupe", + "zh" : "团体" + }, + "comment" : { + "en" : "This class comprises any gatherings or organizations of human individuals or groups that act collectively or in a similar way due to any form of unifying relationship. In the wider sense this class also comprises official positions which used to be regarded in certain contexts as one actor, independent of the current holder of the office, such as the president of a country. In such cases, it may happen that the group never had more than one member. A joint pseudonym (i.e., a name that seems indicative of an individual but that is actually used as a persona by two or more people) is a particular case of E74 Group.\nA gathering of people becomes an instance of E74 Group when it exhibits organizational characteristics usually typified by a set of ideas or beliefs held in common, or actions performed together. These might be communication, creating some common artifact, a common purpose such as study, worship, business, sports, etc. Nationality can be modelled as membership in an instance of E74 Group. Married couples and other concepts of family are regarded as particular examples of E74 Group." + }, + "attributes" : [ "external" ], + "id" : "20", + "superClasses" : [ "78" ] + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/E86_Leaving", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "instances" : 0, + "label" : { + "de" : "Austritt", + "IRI-based" : "E86_Leaving", + "en" : "Leaving", + "zh" : "离开" + }, + "comment" : { + "en" : "This class comprises the activities that result in an instance of E39 Actor to be disassociated from an instance of E74 Group. This class does not imply initiative by either party. It may be the initiative of a third party.\nTypical scenarios include the termination of membership in a social organisation, ending the employment at a company, divorce, and the end of tenure of somebody in an official position." + }, + "attributes" : [ "external" ], + "id" : "226", + "superClasses" : [ "45" ] + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/E69_Death", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "instances" : 0, + "label" : { + "de" : "Tod", + "IRI-based" : "E69_Death", + "ru" : "Смерть", + "pt" : "Morte", + "el" : "Θάνατος", + "en" : "Death", + "fr" : "Mort", + "zh" : "死亡" + }, + "comment" : { + "en" : "This class comprises the deaths of human beings.\nIf a person is killed, the death should be documented as an instance of both E69 Death and E7 Activity. The death or perishing of other living beings should be documented as instances of E64 End of Existence." + }, + "attributes" : [ "external" ], + "id" : "75", + "superClasses" : [ "71" ] + }, { + "iri" : "http://w3id.org/vir#IC9_Representation", + "baseIri" : "http://w3id.org/vir", + "instances" : 0, + "annotations" : { + "exactMatch" : [ { + "identifier" : "exactMatch", + "language" : "undefined", + "value" : "https://w3id.org/lio/v1PictorialElement", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "IC9_Representation", + "undefined" : "Representation" + }, + "comment" : { + "undefined" : "A single pictorial item or a part of it. Single representations or region of the same representations are instance of this class." + }, + "id" : "126", + "superClasses" : [ "133" ] + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/E70_Thing", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "instances" : 0, + "label" : { + "de" : "Sache", + "IRI-based" : "E70_Thing", + "ru" : "Вещь", + "pt" : "Coisa", + "el" : "Πράγμα", + "en" : "Thing", + "fr" : "Chose", + "zh" : "事物" + }, + "subClasses" : [ "88", "44" ], + "comment" : { + "en" : "This general class comprises discrete, identifiable, instances of E77 Persistent Item that are documented as single units, that either consist of matter or depend on being carried by matter and are characterized by relative stability.\nThey may be intellectual products or physical things. They may for instance have a solid physical form, an electronic encoding, or they may be a logical concept or structure." + }, + "attributes" : [ "external" ], + "id" : "89", + "superClasses" : [ "278" ] + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/E37_Mark", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "instances" : 0, + "label" : { + "de" : "Marke", + "IRI-based" : "E37_Mark", + "ru" : "Пометка", + "pt" : "Marca", + "el" : "Σήμανση", + "en" : "Mark", + "fr" : "Marque", + "zh" : "标记" + }, + "subClasses" : [ "57" ], + "comment" : { + "en" : "This class comprises symbols, signs, signatures or short texts applied to instances of E24 Physical Human-Made Thing by arbitrary techniques, often in order to indicate such things as creator, owner, dedications, purpose or to communicate information generally. Instances of E37 Mark do not represent the actual image of a mark, but the abstract ideal (or archetype) as used for codification in reference documents forming cultural documentation.\nThis class specifically excludes features that have no semantic significance, such as scratches or tool marks. These should be documented as instances of E25 Human-Made Feature." + }, + "attributes" : [ "external" ], + "id" : "58", + "superClasses" : [ "133" ] + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/E99_Product_Type", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "instances" : 0, + "label" : { + "IRI-based" : "E99_Product_Type", + "en" : "Product Type" + }, + "comment" : { + "en" : "This classes comprises types that stand as the models for instances of E22 Human-Made Object that are produced as the result of production activities using plans exact enough to result in one or more series of uniform, functionally and aesthetically identical and interchangeable items. The product type is the intended ideal form of the manufacture process. It is typical of instances of E22 that conform to an instance of E99 Product Type that its component parts are interchangeable with component parts of other instances of E22 made after the model of the same instance of E99. Frequently, the uniform production according to a given instance of E99 Product Type is achieved by creating individual tools, such as moulds or print plates that are themselves carriers of the design of the product type. Modern tools may use the flexibility of electronically controlled devices to achieve such uniformity. The product type itself, i.e., the potentially unlimited series of aesthetically equivalent items, may be the target of artistic design, rather than the individual object. In extreme cases, only one instance of a product type may have been produced, such as in a \"print on demand\" process which was only triggered once. However, this should not be confused with industrial prototypes, such as car prototypes, which are produced prior to the production line being set up, or test the production line itself." + }, + "attributes" : [ "external" ], + "id" : "118", + "superClasses" : [ "108" ] + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/E56_Language", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "instances" : 0, + "label" : { + "de" : "Sprache", + "IRI-based" : "E56_Language", + "ru" : "Язык", + "pt" : "Língua", + "el" : "Γλώσσα", + "en" : "Language", + "fr" : "Langue", + "zh" : "语种" + }, + "comment" : { + "en" : "This class is a specialization of E55 Type and comprises the natural languages in the sense of concepts.\nThis type is used categorically in the model without reference to instances of it, i.e., the Model does not foresee the description of instances of instances of E56 Language, e.g.: “instances of Mandarin Chinese”.\nIt is recommended that internationally or nationally agreed codes and terminology are used to denote instances of E56 Language, such as those defined in ISO 639-2:1998 and later versions." + }, + "attributes" : [ "external" ], + "id" : "117", + "superClasses" : [ "108" ] + }, { + "iri" : "http://w3id.org/vir#IC12_Visual_Recognition", + "baseIri" : "http://w3id.org/vir", + "instances" : 0, + "label" : { + "IRI-based" : "IC12_Visual_Recognition", + "undefined" : "Visual Recognition" + }, + "comment" : { + "undefined" : "The activity of assigning the iconographical status to a man-made object, or to one of its parts. It takes into account the possibility to link it to a speech act or a document where the authoritative proposition is clearly made" + }, + "id" : "28", + "superClasses" : [ "26" ] + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/E27_Site", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "instances" : 0, + "label" : { + "de" : "Gelände", + "IRI-based" : "E27_Site", + "ru" : "Участок", + "pt" : "Lugar", + "el" : "Φυσικός Χώρος", + "en" : "Site", + "fr" : "Site", + "zh" : "场地" + }, + "comment" : { + "en" : "This class comprises pieces of land or sea floor.\nIn contrast to the purely geometric notion of E53 Place, this class describes constellations of matter on the surface of the Earth or other celestial body, which can be represented by photographs, paintings and maps.\nInstances of E27 Site are composed of relatively immobile material items and features in a particular configuration at a particular location." + }, + "attributes" : [ "external" ], + "id" : "454", + "superClasses" : [ "281" ] + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/E3_Condition_State", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "instances" : 0, + "label" : { + "de" : "Zustandsphase", + "IRI-based" : "E3_Condition_State", + "ru" : "Состояние", + "pt" : "Estado Material", + "el" : "Κατάσταση", + "en" : "Condition State", + "fr" : "État matériel", + "zh" : "条件状态" + }, + "comment" : { + "en" : "This class comprises the states of objects characterised by a certain condition over a time-span.\nAn instance of this class describes the prevailing physical condition of any material object or feature during a specific instance of E52 Time-Span. In general, the time-span for which a certain condition can be asserted may be shorter than the real time-span, for which this condition held.\nThe nature of that condition can be described using P2 has type. For example, the instance of E3 Condition State “condition of the SS Great Britain between 22-nd September 1846 and 27-th August 1847” can be characterized as an instance “wrecked” of E55 Type." + }, + "attributes" : [ "external" ], + "id" : "115", + "superClasses" : [ "116" ] + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/E63_Beginning_of_Existence", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "instances" : 0, + "label" : { + "de" : "Daseinsbeginn", + "IRI-based" : "E63_Beginning_of_Existence", + "ru" : "Начало Существования", + "pt" : "Início da Existência", + "el" : "Αρχή Ύπαρξης", + "en" : "Beginning of Existence", + "fr" : "Début d'existence", + "zh" : "初始" + }, + "subClasses" : [ "63", "1", "8", "15", "17" ], + "comment" : { + "en" : "This class comprises events that bring into existence any instance of E77 Persistent Item.\nIt may be used for temporal reasoning about things (intellectual products, physical items, groups of people, living beings) beginning to exist; it serves as a hook for determination of a “terminus post quem” or “terminus ante quem”." + }, + "attributes" : [ "external" ], + "id" : "2", + "superClasses" : [ "198" ] + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/E81_Transformation", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "instances" : 0, + "label" : { + "de" : "Umwandlung", + "IRI-based" : "E81_Transformation", + "ru" : "Трансформация", + "pt" : "Transformação", + "el" : "Μετατροπή", + "en" : "Transformation", + "fr" : "Transformation", + "zh" : "转变" + }, + "comment" : { + "en" : "This class comprises the events that result in the simultaneous destruction of one or more than one E18 Physical Thing and the creation of one or more than one E18 Physical Thing that preserves recognizable substance and structure from the first one(s) but has fundamentally different nature or identity.\nAlthough the old and the new instances of E18 Physical Thing are treated as discrete entities having separate, unique identities, they are causally connected through the E81 Transformation; the destruction of the old E18 Physical Thing(s) directly causes the creation of the new one(s) using or preserving some relevant substance and structure. Instances of E81 Transformation are therefore distinct from re-classifications (documented using E17 Type Assignment) or modifications (documented using E11 Modification) of objects that do not fundamentally change their nature or identity. Characteristic cases are reconstructions and repurposing of historical buildings or ruins, fires leaving buildings in ruins, taxidermy of specimen in natural history.\nEven though such instances of E81 Transformation are often motivated by a change of intended use, substantial material changes should justify the documentation of the result as a new instance of E18 Physical Thing and not just the change of function. The latter may be documented as an extended activity (instance of E7 Activity) of using it." + }, + "attributes" : [ "external" ], + "id" : "17", + "superClasses" : [ "71", "2" ] + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/E93_Presence", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "instances" : 0, + "label" : { + "IRI-based" : "E93_Presence", + "en" : "Presence" + }, + "comment" : { + "en" : "This class comprises instances of E92 Spacetime Volume, whose temporal extent has been chosen in order to determine the spatial extent of a phenomenon over the chosen time-span. Respective phenomena may, for instance, be historical events or periods, but can also be the diachronic extent and existence of physical things. In other words, instances of this class fix a slice of another instance of E92 Spacetime Volume in time.\nThe temporal extent of an instance of E93 Presence typically is predetermined by the researcher so as to focus the investigation particularly on finding the spatial extent of the phenomenon by testing for its characteristic features. There are at least two basic directions such investigations might take. The investigation may wish to determine where something was during some time or it may wish to reconstruct the total passage of a phenomenon’s spacetime volume through an examination of discrete presences. Observation and measurement of features indicating the presence or absence of a phenomenon in some space allows for the progressive approximation of spatial extents through argumentation typically based on inclusion, exclusion and various overlaps." + }, + "attributes" : [ "external" ], + "id" : "173", + "superClasses" : [ "249" ] + }, { + "iri" : "http://www.ics.forth.gr/isl/CRMsci/S4_Observation", + "baseIri" : "http://www.ics.forth.gr/isl/CRMsci", + "instances" : 0, + "label" : { + "IRI-based" : "S4_Observation" + }, + "subClasses" : [ "25", "28" ], + "attributes" : [ "external" ], + "id" : "26" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/E80_Part_Removal", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "instances" : 0, + "label" : { + "de" : "Teilentfernung", + "IRI-based" : "E80_Part_Removal", + "ru" : "Удаление Части", + "pt" : "Remoção de Parte", + "el" : "Αφαίρεση Μερών", + "en" : "Part Removal", + "fr" : "Soustraction d'élément", + "zh" : "部分去除" + }, + "comment" : { + "en" : "This class comprises the activities that result in an instance of E18 Physical Thing being decreased by the removal of a part.\nTypical scenarios include the detachment of an accessory, the removal of a component or part of a composite object, or the deaccessioning of an object from a curated collection, an instance of E78 Curated Holding. If the instance of E80 Part Removal results in the total decomposition of the original object into pieces, such that the whole ceases to exist, the activity should instead be modelled as an instance of E81 Transformation, i.e., a simultaneous destruction and production. In cases where the part removed has no discernible identity prior to its removal but does have an identity subsequent to its removal, the activity should be modelled as both an instance of E80 Part Removal and E12 Production. This class of activities forms a basis for reasoning about the history, and continuity of identity over time, of objects that are removed from other objects, such as precious gemstones being extracted from different items of jewellery, or cultural artifacts being deaccessioned from different museum collections over their lifespan." + }, + "attributes" : [ "external" ], + "id" : "10", + "superClasses" : [ "267" ] + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/E21_Person", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "instances" : 0, + "label" : { + "de" : "Person", + "IRI-based" : "E21_Person", + "ru" : "Личность", + "pt" : "Pessoa", + "el" : "Πρόσωπο", + "en" : "Person", + "fr" : "Personne", + "zh" : "人物" + }, + "comment" : { + "en" : "This class comprises real persons who live or are assumed to have lived.\nLegendary figures that may have existed, such as Ulysses and King Arthur, fall into this class if the documentation refers to them as historical figures. In cases where doubt exists as to whether several persons are in fact identical, multiple instances can be created and linked to indicate their relationship. The CIDOC CRM does not propose a specific form to support reasoning about possible identity.\nIn a bibliographic context, a name presented following the conventions usually employed for personal names will be assumed to correspond to an actual real person (an instance of E21 Person), unless evidence is available to indicate that this is not the case. The fact that a persona may erroneously be classified as an instance of E21 Person does not imply that the concept comprises personae." + }, + "attributes" : [ "external" ], + "id" : "111", + "superClasses" : [ "135", "78" ] + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/E29_Design_or_Procedure", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "instances" : 0, + "label" : { + "de" : "Entwurf oder Verfahren", + "IRI-based" : "E29_Design_or_Procedure", + "ru" : "Проект или Процедура", + "pt" : "Projeto ou Procedimento", + "el" : "Σχέδιο", + "en" : "Design or Procedure", + "fr" : "Conception ou procédure", + "zh" : "设计或程序" + }, + "subClasses" : [ "30" ], + "comment" : { + "en" : "This class comprises documented plans for the execution of actions in order to achieve a result of a specific quality, form or contents. In particular, it comprises plans for deliberate human activities that may result in new instances of E71 Human-Made Thing or for shaping or guiding the execution of an instance of E7 Activity.\nInstances of E29 Design or Procedure can be structured in parts and sequences or depend on others.\nThis is modelled using P69 has association with (is associated with): E29 Design or Procedure.\nDesigns or procedures can be seen as one of the following\n1. A schema for the activities it describes\n2. A schema of the products that result from their application.\n3. An independent intellectual product that may have never been applied, such as Leonardo da Vinci’s famous plans for flying machines.\nBecause designs or procedures may never be applied or only partially executed, the CIDOC CRM models a loose relationship between the plan and the respective product." + }, + "attributes" : [ "external" ], + "id" : "31", + "superClasses" : [ "6" ] + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/E73_Information_Object", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "instances" : 0, + "label" : { + "de" : "Informationsgegenstand", + "IRI-based" : "E73_Information_Object", + "ru" : "Информационный Объект", + "pt" : "Objeto de Informação", + "el" : "Πληροφοριακό Αντικείμενο", + "en" : "Information Object", + "fr" : "Objet d'information", + "zh" : "信息对象" + }, + "subClasses" : [ "33", "133", "220", "31" ], + "comment" : { + "en" : "This class comprises identifiable immaterial items, such as poems, jokes, data sets, images, texts, multimedia objects, procedural prescriptions, computer program code, algorithm or mathematical formulae, that have an objectively recognizable structure and are documented as single units. The encoding structure known as a \"named graph\" also falls under this class, so that each \"named graph\" is an instance of E73 Information Object.\nAn instance of E73 Information Object does not depend on a specific physical carrier, which can include human memory, and it can exist on one or more carriers simultaneously.\nInstances of E73 Information Object of a linguistic nature should be declared as instances of the E33 Linguistic Object subclass. Instances of E73 Information Object of a documentary nature should be declared as instances of the E31 Document subclass. Conceptual items such as types and classes are not instances of E73 Information Object, nor are ideas without a reproducible expression." + }, + "attributes" : [ "external" ], + "id" : "6", + "superClasses" : [ "132", "3" ] + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/E16_Measurement", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "instances" : 0, + "label" : { + "de" : "Messung", + "IRI-based" : "E16_Measurement", + "ru" : "Событие Измерения", + "pt" : "Medição", + "el" : "Μέτρηση", + "en" : "Measurement", + "fr" : "Mesurage", + "zh" : "测量" + }, + "comment" : { + "en" : "This class comprises actions measuring quantitative physical properties and other values that can be determined by a systematic, objective procedure of direct observation of particular states of physical reality.\nAn instance of E16 Measurement may use simple counting or tools, such as yardsticks or radiation detection devices. The interest is in the method and care applied, so that the reliability of the result may be judged at a later stage, or research continued on the associated documents. The date of the event is important for dimensions, which may change value over time, such as the length of an object subject to shrinkage. Methods and devices employed should be associated with instances of E16 Measurement by properties such as P33 used specific technique: E29 Design or Procedure, P125 used object of type: E55 Type, P16 used specific object (was used for): E70 Thing, whereas basic techniques such as \"carbon-14 dating\" should be encoded using P2 has type (is type of): E55 Type. Details of methods and devices reused or reusable in other instances of E16 Measurement should be documented for these entities rather than the measurements themselves, whereas details of particular execution may be documented by free text or by instantiating adequate sub-activities, if the detail may be of interest for an overarching query.\nRegardless whether a measurement is made by an instrument or by human senses, it represents the initial transition from physical reality to information without any other documented information object in between within the reasoning chain that would represent the result of the interaction of the observer or device with reality. Therefore, determining properties of an instance of E90 Symbolic Object is regarded as an instance of E13 Attribute Assignment, which may be inferred from observing and measuring representative carriers. In the case that the carrier can be named, the property P16 used specific object (was used for): should be used to indicate the instance(s) of E18 Physical Thing that was used as the empirical basis for the attribute assignment. For instance, inferring properties of depicted items using image material, such as satellite images, is not regarded as an instance of E16 Measurement, but as a subsequent instance of E13 Attribute Assignment. Rather, only the production of the images, understood as arrays of radiation intensities, is regarded as an instance of E16 Measurement. The same reasoning holds for other sensor data." + }, + "attributes" : [ "external" ], + "id" : "273", + "superClasses" : [ "233" ] + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/E9_Move", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "instances" : 0, + "label" : { + "de" : "Objektbewegung", + "IRI-based" : "E9_Move", + "ru" : "Перемещение", + "pt" : "Locomoção", + "el" : "Μετακίνηση", + "en" : "Move", + "fr" : "Déplacement", + "zh" : "移动" + }, + "comment" : { + "en" : "This class comprises changes of the physical location of the instances of E19 Physical Object.\nNote, that the class E9 Move inherits the property P7 took place at (witnessed): E53 Place. This property should be used to describe the trajectory or a larger area within which a move takes place, whereas the properties P26 moved to (was destination of), P27 moved from (was origin of) describe the start and end points only. Moves may also be documented to consist of other moves (via P9 consists of (forms part of)), in order to describe intermediate stages on a trajectory. In that case, start and end points of the partial moves should match appropriately between each other and with the overall event." + }, + "attributes" : [ "external" ], + "id" : "160", + "superClasses" : [ "45" ] + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/E78_Curated_Holding", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "instances" : 0, + "label" : { + "IRI-based" : "E78_Curated_Holding", + "en" : "Curated Holding" + }, + "comment" : { + "en" : "This class comprises aggregations of instances of E18 Physical Thing that are assembled and maintained (“curated” and “preserved,” in museological terminology) by one or more instances of E39 Actor over time for a specific purpose and audience, and according to a particular collection development plan. Typical instances of curated holdings are museum collections, archives, library holdings and digital libraries. A digital library is regarded as an instance of E18 Physical Thing because it requires keeping physical carriers of the electronic content.\nItems may be added or removed from an E78 Curated Holding in pursuit of this plan. This class should not be confused with the E39 Actor maintaining the E78 Curated Holding often referred to with the name of the E78 Curated Holding (e.g., “The Wallace Collection decided…”).\nCollective objects in the general sense, like a tomb full of gifts, a folder with stamps or a set of chessmen, should be documented as instances of E19 Physical Object, and not as instances of E78 Curated Holding. This is because they form wholes either because they are physically bound together or because they are kept together for their functionality." + }, + "attributes" : [ "external" ], + "id" : "104", + "superClasses" : [ "41" ] + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "340", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "559", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "486", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "405", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/E41_Appellation", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "instances" : 0, + "label" : { + "de" : "Benennung", + "IRI-based" : "E41_Appellation", + "ru" : "Обозначение", + "pt" : "Designação", + "el" : "Ονομασία", + "en" : "Appellation", + "fr" : "Appellation", + "zh" : "称谓" + }, + "subClasses" : [ "270", "157", "265" ], + "comment" : { + "en" : "This class comprises signs, either meaningful or not, or arrangements of signs following a specific syntax, that are used or can be used to refer to and identify a specific instance of some class or category within a certain context.\nInstances of E41 Appellation do not identify things by their meaning, even if they happen to have one, but instead by convention, tradition, or agreement. Instances of E41 Appellation are cultural constructs; as such, they have a context, a history, and a use in time and space by some group of users. A given instance of E41 Appellation can have alternative forms, i.e., other instances of E41 Appellation that are always regarded as equivalent independent from the thing it denotes.\nDifferent languages may use different appellations for the same thing, such as the names of major cities. Some appellations may be formulated using a valid noun phrase of a particular language. In these cases, the respective instances of E41 Appellation should also be declared as instances of E33 Linguistic Object. Then the language using the appellation can be declared with the property P72 has language: E56 Language.\nInstances of E41 Appellation may be used to identify any instance of E1 CRM Entity and sometimes are characteristic for instances of more specific subclasses E1 CRM Entity, such as for instances of E52 Time-Span (for instance “dates”), E39 Actor, E53 Place or E28 Conceptual Object. Postal addresses and E-mail addresses are characteristic examples of identifiers used by services transporting things between clients.\nEven numerically expressed identifiers for extents in space or time are also regarded as instances of E41 Appellation, such as Gregorian dates or spatial coordinates, even though they allow for determining some time or location by a known procedure starting from a reference point and by virtue of that fact play a double role as instances of E59 Primitive Value.\nE41 Appellation should not be confused with the act of naming something. Cf. E15 Identifier Assignment" + }, + "attributes" : [ "external" ], + "id" : "183", + "superClasses" : [ "132" ] + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "470", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "570", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "553", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/E98_Currency", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "instances" : 0, + "label" : { + "IRI-based" : "E98_Currency", + "en" : "Currency" + }, + "comment" : { + "en" : "This class comprises the units in which a monetary system, supported by an administrative authority or other community, quantifies and arithmetically compares all monetary amounts declared in the unit. The unit of a monetary system must describe a nominal value which is kept constant by its administrative authority and an associated banking system if it exists, and not by market value. For instance, one may pay with grams of gold, but the respective monetary amount would have been agreed as the gold price in US dollars on the day of the payment. Under this definition, British Pounds, U.S. Dollars, and European Euros are examples of currency, but “grams of gold” is not. One monetary system has one and only one currency. Instances of this class must not be confused with coin denominations, such as “Dime” or “Sestertius”. Non-monetary exchange of value in terms of quantities of a particular type of goods, such as cows, do not constitute a currency." + }, + "attributes" : [ "external" ], + "id" : "65", + "superClasses" : [ "35" ] + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "573", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "566", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "222", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/1999/02/22-rdf-syntax-ns#Class", + "baseIri" : "http://www.w3.org/1999/02/22-rdf-syntax-ns", + "instances" : 10, + "label" : { + "IRI-based" : "Class" + }, + "attributes" : [ "external" ], + "id" : "321" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/E8_Acquisition", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "instances" : 0, + "label" : { + "de" : "Erwerb", + "IRI-based" : "E8_Acquisition", + "ru" : "Событие Приобретения", + "pt" : "Aquisição", + "el" : "Απόκτηση", + "en" : "Acquisition", + "fr" : "Acquisition", + "zh" : "采访" + }, + "subClasses" : [ "208" ], + "comment" : { + "en" : "This class comprises transfers of legal ownership from one or more instances of E39 Actor to one or more other instances of E39 Actor.\nThe class also applies to the establishment or loss of ownership of instances of E18 Physical Thing. It does not, however, imply changes of any other kinds of right. The recording of the donor and/or recipient is optional. It is possible that in an instance of E8 Acquisition there is either no donor or no recipient. Depending on the circumstances, it may describe:\n1. the beginning of ownership\n2. the end of ownership\n3. the transfer of ownership\n4. the acquisition from an unknown source\n5. the loss of title due to destruction of the item\nIt may also describe events where a collector appropriates legal title, for example by annexation or field collection. The interpretation of the museum notion of \"accession\" differs between institutions. The CIDOC CRM therefore models legal ownership (E8 Acquisition) and physical custody (E10 Transfer of Custody) separately. Institutions will then model their specific notions of accession and deaccession as combinations of these." + }, + "attributes" : [ "external" ], + "id" : "60", + "superClasses" : [ "45" ] + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/E77_Persistent_Item", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "instances" : 0, + "label" : { + "de" : "Seiendes", + "IRI-based" : "E77_Persistent_Item", + "ru" : "Постоянная Сущность", + "pt" : "Entidade Persistente", + "el" : "Ον", + "en" : "Persistent Item", + "fr" : "Entité persistante", + "zh" : "持久项" + }, + "subClasses" : [ "89", "78" ], + "comment" : { + "en" : "This class comprises items that have persistent characteristics of structural nature substantially related to their identity and their integrity, sometimes known as “endurants” in philosophy. Persistent Items may be physical entities, such as people, animals or things, conceptual entities such as ideas, concepts, products of the imagination or even names.\nInstances of E77 Persistent Item may be present or be part of interactions in different periods or events. They can repeatedly be recognized at disparate occasions during their existence by characteristics of structural nature. The respective characteristics need not be exactly the same during all the existence of an instance of E77 Persistent Item. Often, they undergo gradual change, still bearing some similarities with that of previous times, or disappear completely and new emerge. For instance, a person, from the time of being born on, will gradually change all its features and acquire new ones, such as a scar. Even the DNA in different body cells will develop defects and mutations. Nevertheless, relevant characteristics used should be sufficiently similar to recognize the instance for some substantial period of time.\nThe more specific criteria that determine the identity of instances of subclasses of E77 Persistent Item may vary considerably and are described or referred to in the respective scope notes. The decision about which exact criteria to use depends on whether the observable behaviour of the respective part of reality such confined conforms to the reasoning the user is interested in. For example, a building can be regarded as no longer existing if it is dismantled and the materials reused in a different configuration. On the other hand, human beings go through radical and profound changes during their life-span, affecting both material composition and form, yet preserve their identity by other criteria, such as being bodily separated from other persons. Similarly, inanimate objects may be subject to exchange of parts and matter. On the opposite, the identity of a (version of a) text of a scientific publication is given by the exact arrangement of its relevant symbols.\nThe main classes of objects that fall outside the scope of the E77 Persistent Item class are temporal objects such as periods, events and acts, and descriptive properties.\nAn instance of E77 Persistent Item does not require actual knowledge of the identifying features of the instance being currently known. There may be cases, where the actual identifying features of an instance of E77 Persistent Item are not decidable at a particular state of knowledge." + }, + "attributes" : [ "external" ], + "id" : "278", + "superClasses" : [ "40" ] + }, { + "iri" : "http://w3id.org/vir#IC20_Verso", + "baseIri" : "http://w3id.org/vir", + "instances" : 0, + "annotations" : { + "exactMatch" : [ { + "identifier" : "exactMatch", + "language" : "undefined", + "value" : "https://www.wikidata.org/wiki/Q9368452", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "IC20_Verso", + "undefined" : "Verso" + }, + "comment" : { + "undefined" : "The back or underside of a single sheet of paper, or the left-hand page of an open book. The feature is presents in object such as codex, books, pamphlets, documents, photographs and painting." + }, + "id" : "325", + "superClasses" : [ "281" ] + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/E72_Legal_Object", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "instances" : 0, + "label" : { + "de" : "Rechtsobjekt", + "IRI-based" : "E72_Legal_Object", + "ru" : "Объект Права", + "pt" : "Objeto Jurídico", + "el" : "Νομικό Αντικείμενο", + "en" : "Legal Object", + "fr" : "Objet juridique", + "zh" : "法律对象" + }, + "subClasses" : [ "132", "11" ], + "comment" : { + "en" : "This class comprises those material or immaterial items to which instances of E30 Right, such as the right of ownership or use, can be applied.\nThis is true for all instances of E18 Physical Thing. In the case of instances of E28 Conceptual Object, however, the identity of an instance of E28 Conceptual Object or the method of its use may be too ambiguous to reliably establish instances of E30 Right, as in the case of taxa and inspirations. Ownership of corporations is currently regarded as out of scope of the CIDOC CRM." + }, + "attributes" : [ "external" ], + "id" : "88", + "superClasses" : [ "89" ] + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/E97_Monetary_Amount", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "instances" : 0, + "label" : { + "IRI-based" : "E97_Monetary_Amount", + "en" : "Monetary Amount" + }, + "comment" : { + "en" : "This class comprises quantities of monetary possessions or obligations in terms of their nominal value with respect to a particular currency. These quantities may be abstract accounting units, the nominal value of a heap of coins or bank notes at the time of validity of the respective currency, the nominal value of a bill of exchange or other documents expressing monetary claims or obligations. It specifically excludes amounts expressed in terms of weights of valuable items, like gold and diamonds, and quantities of other non-currency items, like goats or stocks and bonds." + }, + "attributes" : [ "external" ], + "id" : "207", + "superClasses" : [ "36" ] + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/E54_Dimension", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "instances" : 0, + "label" : { + "de" : "Maß", + "IRI-based" : "E54_Dimension", + "ru" : "Величина", + "pt" : "Dimensão", + "el" : "Μέγεθος", + "en" : "Dimension", + "fr" : "Dimensions", + "zh" : "度量规格" + }, + "subClasses" : [ "207" ], + "comment" : { + "en" : "This class comprises quantifiable properties that can be measured by some calibrated means and can be approximated by values, i.e., by points or regions in a mathematical or conceptual space, such as natural or real numbers, RGB values etc.\nAn instance of E54 Dimension represents the empirical or theoretically derived quantity, including the precision tolerances resulting from the particular method or calculation. The identity of an instance of E54 Dimension depends on the method of its determination because each method may produce different values even when determining comparable qualities. For instance, the wingspan of a bird alive or dead is a different dimension. Thermoluninescence dating and Rehydroxylation [RHX] dating are different dimensions of temporal distance from now, even if they aim at dating the same object. The method of determination should be expressed using the property P2 has type (is type of). Note that simple terms such as “diameter” or “length” are normally insufficient to unambiguously describe a respective dimension. In contrast, “maximum linear extent” may be sufficient.\nThe properties of the class E54 Dimension allow for expressing the numerical approximation of the values of instances of E54 Dimension adequate to the precision of the applied method of determination. If the respective quantity belongs to a non-discrete space according to the laws of physics, such as spatial distances, it is recommended to record them as approximations by intervals or regions of indeterminacy enclosing the assumed true values. For instance, a length of 5 cm may be recorded as 4.5-5.5 cm, according to the precision of the respective observation. Note, that comparability of values described in different units depends critically on the representation as value regions.\nNumerical approximations in archaic instances of E58 Measurement Unit used in historical records should be preserved. Equivalents corresponding to current knowledge should be recorded as additional instances of E54 Dimension, as appropriate." + }, + "attributes" : [ "external" ], + "id" : "36", + "superClasses" : [ "40" ] + } ], + "property" : [ { + "id" : "0", + "type" : "rdfs:SubClassOf" + }, { + "id" : "7", + "type" : "rdfs:SubClassOf" + }, { + "id" : "9", + "type" : "owl:objectProperty" + }, { + "id" : "14", + "type" : "rdfs:SubClassOf" + }, { + "id" : "16", + "type" : "rdfs:SubClassOf" + }, { + "id" : "18", + "type" : "owl:objectProperty" + }, { + "id" : "24", + "type" : "rdfs:SubClassOf" + }, { + "id" : "27", + "type" : "rdfs:SubClassOf" + }, { + "id" : "29", + "type" : "rdfs:SubClassOf" + }, { + "id" : "32", + "type" : "rdfs:SubClassOf" + }, { + "id" : "34", + "type" : "owl:objectProperty" + }, { + "id" : "39", + "type" : "owl:objectProperty" + }, { + "id" : "43", + "type" : "owl:objectProperty" + }, { + "id" : "47", + "type" : "owl:objectProperty" + }, { + "id" : "50", + "type" : "owl:objectProperty" + }, { + "id" : "53", + "type" : "owl:objectProperty" + }, { + "id" : "56", + "type" : "rdfs:SubClassOf" + }, { + "id" : "59", + "type" : "owl:objectProperty" + }, { + "id" : "62", + "type" : "rdfs:SubClassOf" + }, { + "id" : "64", + "type" : "rdfs:SubClassOf" + }, { + "id" : "66", + "type" : "rdfs:SubClassOf" + }, { + "id" : "70", + "type" : "rdfs:SubClassOf" + }, { + "id" : "72", + "type" : "rdfs:SubClassOf" + }, { + "id" : "74", + "type" : "rdfs:SubClassOf" + }, { + "id" : "76", + "type" : "owl:objectProperty" + }, { + "id" : "80", + "type" : "rdfs:SubClassOf" + }, { + "id" : "81", + "type" : "owl:datatypeProperty" + }, { + "id" : "84", + "type" : "rdfs:SubClassOf" + }, { + "id" : "87", + "type" : "rdfs:SubClassOf" + }, { + "id" : "90", + "type" : "rdfs:SubClassOf" + }, { + "id" : "91", + "type" : "owl:objectProperty" + }, { + "id" : "94", + "type" : "owl:datatypeProperty" + }, { + "id" : "96", + "type" : "owl:objectProperty" + }, { + "id" : "99", + "type" : "owl:objectProperty" + }, { + "id" : "102", + "type" : "owl:objectProperty" + }, { + "id" : "107", + "type" : "owl:objectProperty" + }, { + "id" : "110", + "type" : "owl:objectProperty" + }, { + "id" : "114", + "type" : "rdfs:SubClassOf" + }, { + "id" : "119", + "type" : "owl:objectProperty" + }, { + "id" : "123", + "type" : "owl:objectProperty" + }, { + "id" : "125", + "type" : "owl:objectProperty" + }, { + "id" : "128", + "type" : "owl:objectProperty" + }, { + "id" : "42", + "type" : "owl:objectProperty" + }, { + "id" : "136", + "type" : "owl:objectProperty" + }, { + "id" : "140", + "type" : "owl:objectProperty" + }, { + "id" : "144", + "type" : "owl:objectProperty" + }, { + "id" : "147", + "type" : "owl:objectProperty" + }, { + "id" : "146", + "type" : "owl:objectProperty" + }, { + "id" : "152", + "type" : "owl:objectProperty" + }, { + "id" : "155", + "type" : "owl:objectProperty" + }, { + "id" : "159", + "type" : "owl:objectProperty" + }, { + "id" : "162", + "type" : "owl:objectProperty" + }, { + "id" : "164", + "type" : "owl:objectProperty" + }, { + "id" : "165", + "type" : "owl:objectProperty" + }, { + "id" : "169", + "type" : "owl:objectProperty" + }, { + "id" : "172", + "type" : "owl:objectProperty" + }, { + "id" : "175", + "type" : "owl:objectProperty" + }, { + "id" : "129", + "type" : "owl:objectProperty" + }, { + "id" : "178", + "type" : "owl:objectProperty" + }, { + "id" : "181", + "type" : "owl:objectProperty" + }, { + "id" : "184", + "type" : "owl:objectProperty" + }, { + "id" : "52", + "type" : "owl:objectProperty" + }, { + "id" : "188", + "type" : "owl:objectProperty" + }, { + "id" : "192", + "type" : "owl:objectProperty" + }, { + "id" : "130", + "type" : "owl:objectProperty" + }, { + "id" : "22", + "type" : "owl:objectProperty" + }, { + "id" : "55", + "type" : "owl:objectProperty" + }, { + "id" : "167", + "type" : "owl:objectProperty" + }, { + "id" : "206", + "type" : "owl:objectProperty" + }, { + "id" : "210", + "type" : "owl:objectProperty" + }, { + "id" : "213", + "type" : "owl:objectProperty" + }, { + "id" : "214", + "type" : "owl:objectProperty" + }, { + "id" : "163", + "type" : "owl:objectProperty" + }, { + "id" : "217", + "type" : "owl:objectProperty" + }, { + "id" : "221", + "type" : "owl:datatypeProperty" + }, { + "id" : "223", + "type" : "owl:objectProperty" + }, { + "id" : "200", + "type" : "owl:objectProperty" + }, { + "id" : "228", + "type" : "owl:objectProperty" + }, { + "id" : "227", + "type" : "owl:objectProperty" + }, { + "id" : "230", + "type" : "owl:objectProperty" + }, { + "id" : "158", + "type" : "owl:objectProperty" + }, { + "id" : "112", + "type" : "owl:objectProperty" + }, { + "id" : "185", + "type" : "owl:objectProperty" + }, { + "id" : "242", + "type" : "owl:objectProperty" + }, { + "id" : "244", + "type" : "owl:objectProperty" + }, { + "id" : "248", + "type" : "owl:objectProperty" + }, { + "id" : "238", + "type" : "owl:objectProperty" + }, { + "id" : "253", + "type" : "owl:objectProperty" + }, { + "id" : "254", + "type" : "owl:objectProperty" + }, { + "id" : "101", + "type" : "owl:objectProperty" + }, { + "id" : "256", + "type" : "owl:objectProperty" + }, { + "id" : "261", + "type" : "owl:objectProperty" + }, { + "id" : "262", + "type" : "rdfs:SubClassOf" + }, { + "id" : "263", + "type" : "owl:objectProperty" + }, { + "id" : "264", + "type" : "rdfs:SubClassOf" + }, { + "id" : "266", + "type" : "owl:objectProperty" + }, { + "id" : "269", + "type" : "rdfs:SubClassOf" + }, { + "id" : "271", + "type" : "rdfs:SubClassOf" + }, { + "id" : "272", + "type" : "rdfs:SubClassOf" + }, { + "id" : "236", + "type" : "owl:objectProperty" + }, { + "id" : "275", + "type" : "rdfs:SubClassOf" + }, { + "id" : "276", + "type" : "owl:objectProperty" + }, { + "id" : "277", + "type" : "rdfs:SubClassOf" + }, { + "id" : "279", + "type" : "rdfs:SubClassOf" + }, { + "id" : "280", + "type" : "rdfs:SubClassOf" + }, { + "id" : "282", + "type" : "owl:objectProperty" + }, { + "id" : "204", + "type" : "owl:objectProperty" + }, { + "id" : "285", + "type" : "owl:objectProperty" + }, { + "id" : "286", + "type" : "owl:objectProperty" + }, { + "id" : "288", + "type" : "owl:objectProperty" + }, { + "id" : "292", + "type" : "owl:objectProperty" + }, { + "id" : "121", + "type" : "owl:objectProperty" + }, { + "id" : "294", + "type" : "rdfs:SubClassOf" + }, { + "id" : "295", + "type" : "rdfs:SubClassOf" + }, { + "id" : "296", + "type" : "owl:objectProperty" + }, { + "id" : "298", + "type" : "rdfs:SubClassOf" + }, { + "id" : "300", + "type" : "owl:objectProperty" + }, { + "id" : "305", + "type" : "owl:objectProperty" + }, { + "id" : "306", + "type" : "owl:objectProperty" + }, { + "id" : "308", + "type" : "owl:objectProperty" + }, { + "id" : "310", + "type" : "owl:objectProperty" + }, { + "id" : "312", + "type" : "owl:objectProperty" + }, { + "id" : "314", + "type" : "owl:objectProperty" + }, { + "id" : "216", + "type" : "owl:objectProperty" + }, { + "id" : "318", + "type" : "owl:objectProperty" + }, { + "id" : "320", + "type" : "rdf:Property" + }, { + "id" : "322", + "type" : "owl:objectProperty" + }, { + "id" : "323", + "type" : "rdf:Property" + }, { + "id" : "324", + "type" : "rdf:Property" + }, { + "id" : "326", + "type" : "rdf:Property" + }, { + "id" : "327", + "type" : "rdf:Property" + }, { + "id" : "328", + "type" : "rdf:Property" + }, { + "id" : "329", + "type" : "rdf:Property" + }, { + "id" : "330", + "type" : "rdf:Property" + }, { + "id" : "332", + "type" : "owl:datatypeProperty" + }, { + "id" : "334", + "type" : "owl:objectProperty" + }, { + "id" : "335", + "type" : "rdf:Property" + }, { + "id" : "205", + "type" : "owl:objectProperty" + }, { + "id" : "38", + "type" : "owl:objectProperty" + }, { + "id" : "202", + "type" : "owl:objectProperty" + }, { + "id" : "337", + "type" : "owl:objectProperty" + }, { + "id" : "124", + "type" : "owl:objectProperty" + }, { + "id" : "339", + "type" : "owl:datatypeProperty" + }, { + "id" : "342", + "type" : "rdf:Property" + }, { + "id" : "343", + "type" : "owl:objectProperty" + }, { + "id" : "349", + "type" : "rdfs:SubClassOf" + }, { + "id" : "350", + "type" : "rdfs:SubClassOf" + }, { + "id" : "351", + "type" : "rdfs:SubClassOf" + }, { + "id" : "194", + "type" : "owl:objectProperty" + }, { + "id" : "319", + "type" : "owl:objectProperty" + }, { + "id" : "354", + "type" : "owl:objectProperty" + }, { + "id" : "209", + "type" : "owl:objectProperty" + }, { + "id" : "357", + "type" : "owl:objectProperty" + }, { + "id" : "287", + "type" : "owl:objectProperty" + }, { + "id" : "358", + "type" : "owl:objectProperty" + }, { + "id" : "360", + "type" : "owl:datatypeProperty" + }, { + "id" : "361", + "type" : "rdfs:SubClassOf" + }, { + "id" : "186", + "type" : "owl:objectProperty" + }, { + "id" : "362", + "type" : "rdfs:SubClassOf" + }, { + "id" : "21", + "type" : "owl:objectProperty" + }, { + "id" : "363", + "type" : "rdfs:SubClassOf" + }, { + "id" : "364", + "type" : "rdfs:SubClassOf" + }, { + "id" : "365", + "type" : "rdfs:SubClassOf" + }, { + "id" : "366", + "type" : "rdfs:SubClassOf" + }, { + "id" : "367", + "type" : "rdfs:SubClassOf" + }, { + "id" : "368", + "type" : "rdfs:SubClassOf" + }, { + "id" : "369", + "type" : "owl:objectProperty" + }, { + "id" : "370", + "type" : "rdfs:SubClassOf" + }, { + "id" : "371", + "type" : "rdfs:SubClassOf" + }, { + "id" : "46", + "type" : "owl:objectProperty" + }, { + "id" : "79", + "type" : "owl:objectProperty" + }, { + "id" : "372", + "type" : "owl:objectProperty" + }, { + "id" : "127", + "type" : "owl:objectProperty" + }, { + "id" : "379", + "type" : "owl:objectProperty" + }, { + "id" : "380", + "type" : "owl:objectProperty" + }, { + "id" : "378", + "type" : "owl:objectProperty" + }, { + "id" : "382", + "type" : "owl:objectProperty" + }, { + "id" : "352", + "type" : "owl:objectProperty" + }, { + "id" : "385", + "type" : "rdfs:SubClassOf" + }, { + "id" : "386", + "type" : "rdfs:SubClassOf" + }, { + "id" : "387", + "type" : "rdfs:SubClassOf" + }, { + "id" : "388", + "type" : "rdfs:SubClassOf" + }, { + "id" : "389", + "type" : "owl:objectProperty" + }, { + "id" : "390", + "type" : "rdfs:SubClassOf" + }, { + "id" : "391", + "type" : "rdfs:SubClassOf" + }, { + "id" : "393", + "type" : "rdfs:SubClassOf" + }, { + "id" : "394", + "type" : "owl:objectProperty" + }, { + "id" : "396", + "type" : "rdfs:SubClassOf" + }, { + "id" : "397", + "type" : "rdfs:SubClassOf" + }, { + "id" : "398", + "type" : "rdfs:SubClassOf" + }, { + "id" : "399", + "type" : "rdfs:SubClassOf" + }, { + "id" : "400", + "type" : "owl:objectProperty" + }, { + "id" : "402", + "type" : "rdfs:SubClassOf" + }, { + "id" : "403", + "type" : "owl:datatypeProperty" + }, { + "id" : "404", + "type" : "owl:datatypeProperty" + }, { + "id" : "406", + "type" : "owl:objectProperty" + }, { + "id" : "237", + "type" : "owl:objectProperty" + }, { + "id" : "409", + "type" : "rdfs:SubClassOf" + }, { + "id" : "410", + "type" : "owl:objectProperty" + }, { + "id" : "141", + "type" : "owl:objectProperty" + }, { + "id" : "408", + "type" : "owl:objectProperty" + }, { + "id" : "255", + "type" : "owl:objectProperty" + }, { + "id" : "196", + "type" : "owl:objectProperty" + }, { + "id" : "415", + "type" : "owl:objectProperty" + }, { + "id" : "417", + "type" : "owl:objectProperty" + }, { + "id" : "418", + "type" : "owl:objectProperty" + }, { + "id" : "419", + "type" : "rdfs:SubClassOf" + }, { + "id" : "420", + "type" : "rdfs:SubClassOf" + }, { + "id" : "12", + "type" : "owl:objectProperty" + }, { + "id" : "421", + "type" : "rdfs:SubClassOf" + }, { + "id" : "171", + "type" : "owl:objectProperty" + }, { + "id" : "423", + "type" : "rdfs:SubClassOf" + }, { + "id" : "424", + "type" : "rdfs:SubClassOf" + }, { + "id" : "425", + "type" : "rdfs:SubClassOf" + }, { + "id" : "426", + "type" : "rdfs:SubClassOf" + }, { + "id" : "427", + "type" : "owl:datatypeProperty" + }, { + "id" : "428", + "type" : "rdfs:SubClassOf" + }, { + "id" : "429", + "type" : "rdfs:SubClassOf" + }, { + "id" : "430", + "type" : "rdfs:SubClassOf" + }, { + "id" : "309", + "type" : "owl:objectProperty" + }, { + "id" : "189", + "type" : "owl:objectProperty" + }, { + "id" : "374", + "type" : "owl:objectProperty" + }, { + "id" : "176", + "type" : "owl:objectProperty" + }, { + "id" : "438", + "type" : "owl:objectProperty" + }, { + "id" : "440", + "type" : "owl:objectProperty" + }, { + "id" : "289", + "type" : "owl:objectProperty" + }, { + "id" : "442", + "type" : "owl:objectProperty" + }, { + "id" : "443", + "type" : "owl:objectProperty" + }, { + "id" : "444", + "type" : "rdfs:SubClassOf" + }, { + "id" : "13", + "type" : "owl:objectProperty" + }, { + "id" : "445", + "type" : "rdfs:SubClassOf" + }, { + "id" : "446", + "type" : "owl:objectProperty" + }, { + "id" : "447", + "type" : "rdfs:SubClassOf" + }, { + "id" : "448", + "type" : "rdfs:SubClassOf" + }, { + "id" : "247", + "type" : "owl:objectProperty" + }, { + "id" : "174", + "type" : "owl:objectProperty" + }, { + "id" : "449", + "type" : "rdfs:SubClassOf" + }, { + "id" : "302", + "type" : "owl:objectProperty" + }, { + "id" : "450", + "type" : "rdfs:SubClassOf" + }, { + "id" : "451", + "type" : "rdfs:SubClassOf" + }, { + "id" : "452", + "type" : "rdfs:SubClassOf" + }, { + "id" : "453", + "type" : "rdfs:SubClassOf" + }, { + "id" : "455", + "type" : "rdfs:SubClassOf" + }, { + "id" : "456", + "type" : "owl:datatypeProperty" + }, { + "id" : "457", + "type" : "owl:objectProperty" + }, { + "id" : "458", + "type" : "rdfs:SubClassOf" + }, { + "id" : "459", + "type" : "rdfs:SubClassOf" + }, { + "id" : "460", + "type" : "rdfs:SubClassOf" + }, { + "id" : "461", + "type" : "rdfs:SubClassOf" + }, { + "id" : "462", + "type" : "owl:objectProperty" + }, { + "id" : "252", + "type" : "owl:objectProperty" + }, { + "id" : "98", + "type" : "owl:objectProperty" + }, { + "id" : "407", + "type" : "owl:objectProperty" + }, { + "id" : "304", + "type" : "owl:objectProperty" + }, { + "id" : "153", + "type" : "owl:objectProperty" + }, { + "id" : "212", + "type" : "owl:objectProperty" + }, { + "id" : "383", + "type" : "owl:objectProperty" + }, { + "id" : "469", + "type" : "owl:datatypeProperty" + }, { + "id" : "381", + "type" : "owl:objectProperty" + }, { + "id" : "471", + "type" : "rdfs:SubClassOf" + }, { + "id" : "122", + "type" : "owl:objectProperty" + }, { + "id" : "473", + "type" : "rdfs:SubClassOf" + }, { + "id" : "474", + "type" : "rdfs:SubClassOf" + }, { + "id" : "475", + "type" : "rdfs:SubClassOf" + }, { + "id" : "476", + "type" : "rdfs:SubClassOf" + }, { + "id" : "477", + "type" : "rdfs:SubClassOf" + }, { + "id" : "478", + "type" : "rdfs:SubClassOf" + }, { + "id" : "479", + "type" : "rdfs:SubClassOf" + }, { + "id" : "480", + "type" : "owl:objectProperty" + }, { + "id" : "481", + "type" : "rdfs:SubClassOf" + }, { + "id" : "482", + "type" : "owl:objectProperty" + }, { + "id" : "484", + "type" : "rdfs:SubClassOf" + }, { + "id" : "422", + "type" : "owl:objectProperty" + }, { + "id" : "353", + "type" : "owl:objectProperty" + }, { + "id" : "485", + "type" : "owl:datatypeProperty" + }, { + "id" : "487", + "type" : "owl:objectProperty" + }, { + "id" : "466", + "type" : "owl:objectProperty" + }, { + "id" : "291", + "type" : "owl:objectProperty" + }, { + "id" : "488", + "type" : "owl:objectProperty" + }, { + "id" : "490", + "type" : "owl:objectProperty" + }, { + "id" : "307", + "type" : "owl:objectProperty" + }, { + "id" : "491", + "type" : "rdfs:SubClassOf" + }, { + "id" : "336", + "type" : "owl:objectProperty" + }, { + "id" : "301", + "type" : "owl:objectProperty" + }, { + "id" : "113", + "type" : "owl:objectProperty" + }, { + "id" : "492", + "type" : "rdfs:SubClassOf" + }, { + "id" : "493", + "type" : "rdfs:SubClassOf" + }, { + "id" : "494", + "type" : "rdfs:SubClassOf" + }, { + "id" : "495", + "type" : "rdfs:SubClassOf" + }, { + "id" : "496", + "type" : "owl:objectProperty" + }, { + "id" : "497", + "type" : "owl:objectProperty" + }, { + "id" : "416", + "type" : "owl:objectProperty" + }, { + "id" : "498", + "type" : "owl:objectProperty" + }, { + "id" : "500", + "type" : "owl:objectProperty" + }, { + "id" : "437", + "type" : "owl:objectProperty" + }, { + "id" : "137", + "type" : "owl:objectProperty" + }, { + "id" : "503", + "type" : "owl:objectProperty" + }, { + "id" : "472", + "type" : "owl:objectProperty" + }, { + "id" : "142", + "type" : "owl:objectProperty" + }, { + "id" : "505", + "type" : "owl:objectProperty" + }, { + "id" : "501", + "type" : "owl:objectProperty" + }, { + "id" : "508", + "type" : "owl:objectProperty" + }, { + "id" : "509", + "type" : "owl:objectProperty" + }, { + "id" : "510", + "type" : "owl:objectProperty" + }, { + "id" : "190", + "type" : "owl:objectProperty" + }, { + "id" : "511", + "type" : "rdfs:SubClassOf" + }, { + "id" : "512", + "type" : "rdfs:SubClassOf" + }, { + "id" : "513", + "type" : "rdfs:SubClassOf" + }, { + "id" : "514", + "type" : "owl:objectProperty" + }, { + "id" : "504", + "type" : "owl:objectProperty" + }, { + "id" : "359", + "type" : "owl:objectProperty" + }, { + "id" : "506", + "type" : "owl:objectProperty" + }, { + "id" : "518", + "type" : "owl:objectProperty" + }, { + "id" : "239", + "type" : "owl:objectProperty" + }, { + "id" : "520", + "type" : "owl:objectProperty" + }, { + "id" : "315", + "type" : "owl:objectProperty" + }, { + "id" : "243", + "type" : "owl:objectProperty" + }, { + "id" : "521", + "type" : "owl:objectProperty" + }, { + "id" : "151", + "type" : "owl:objectProperty" + }, { + "id" : "522", + "type" : "owl:objectProperty" + }, { + "id" : "154", + "type" : "owl:objectProperty" + }, { + "id" : "524", + "type" : "owl:objectProperty" + }, { + "id" : "131", + "type" : "owl:objectProperty" + }, { + "id" : "523", + "type" : "owl:objectProperty" + }, { + "id" : "197", + "type" : "owl:objectProperty" + }, { + "id" : "411", + "type" : "owl:objectProperty" + }, { + "id" : "23", + "type" : "owl:objectProperty" + }, { + "id" : "502", + "type" : "owl:objectProperty" + }, { + "id" : "463", + "type" : "owl:objectProperty" + }, { + "id" : "290", + "type" : "owl:objectProperty" + }, { + "id" : "528", + "type" : "owl:objectProperty" + }, { + "id" : "257", + "type" : "owl:objectProperty" + }, { + "id" : "193", + "type" : "owl:objectProperty" + }, { + "id" : "433", + "type" : "owl:objectProperty" + }, { + "id" : "313", + "type" : "owl:objectProperty" + }, { + "id" : "168", + "type" : "owl:objectProperty" + }, { + "id" : "529", + "type" : "owl:objectProperty" + }, { + "id" : "54", + "type" : "owl:objectProperty" + }, { + "id" : "203", + "type" : "owl:objectProperty" + }, { + "id" : "225", + "type" : "owl:objectProperty" + }, { + "id" : "533", + "type" : "owl:objectProperty" + }, { + "id" : "534", + "type" : "owl:objectProperty" + }, { + "id" : "535", + "type" : "owl:objectProperty" + }, { + "id" : "356", + "type" : "owl:objectProperty" + }, { + "id" : "537", + "type" : "owl:objectProperty" + }, { + "id" : "215", + "type" : "owl:objectProperty" + }, { + "id" : "414", + "type" : "owl:objectProperty" + }, { + "id" : "539", + "type" : "owl:objectProperty" + }, { + "id" : "516", + "type" : "owl:objectProperty" + }, { + "id" : "93", + "type" : "owl:objectProperty" + }, { + "id" : "138", + "type" : "owl:objectProperty" + }, { + "id" : "48", + "type" : "owl:objectProperty" + }, { + "id" : "542", + "type" : "owl:datatypeProperty" + }, { + "id" : "436", + "type" : "owl:objectProperty" + }, { + "id" : "507", + "type" : "owl:objectProperty" + }, { + "id" : "543", + "type" : "owl:objectProperty" + }, { + "id" : "431", + "type" : "owl:objectProperty" + }, { + "id" : "177", + "type" : "owl:objectProperty" + }, { + "id" : "434", + "type" : "owl:objectProperty" + }, { + "id" : "170", + "type" : "owl:objectProperty" + }, { + "id" : "109", + "type" : "owl:objectProperty" + }, { + "id" : "191", + "type" : "owl:objectProperty" + }, { + "id" : "515", + "type" : "owl:objectProperty" + }, { + "id" : "546", + "type" : "owl:objectProperty" + }, { + "id" : "548", + "type" : "owl:objectProperty" + }, { + "id" : "245", + "type" : "owl:objectProperty" + }, { + "id" : "551", + "type" : "owl:objectProperty" + }, { + "id" : "195", + "type" : "owl:objectProperty" + }, { + "id" : "61", + "type" : "owl:objectProperty" + }, { + "id" : "166", + "type" : "owl:objectProperty" + }, { + "id" : "530", + "type" : "owl:objectProperty" + }, { + "id" : "376", + "type" : "owl:objectProperty" + }, { + "id" : "293", + "type" : "owl:objectProperty" + }, { + "id" : "538", + "type" : "owl:objectProperty" + }, { + "id" : "552", + "type" : "owl:datatypeProperty" + }, { + "id" : "224", + "type" : "owl:objectProperty" + }, { + "id" : "139", + "type" : "owl:objectProperty" + }, { + "id" : "554", + "type" : "owl:objectProperty" + }, { + "id" : "143", + "type" : "owl:objectProperty" + }, { + "id" : "545", + "type" : "owl:objectProperty" + }, { + "id" : "555", + "type" : "owl:objectProperty" + }, { + "id" : "234", + "type" : "owl:objectProperty" + }, { + "id" : "218", + "type" : "owl:objectProperty" + }, { + "id" : "483", + "type" : "owl:objectProperty" + }, { + "id" : "526", + "type" : "owl:objectProperty" + }, { + "id" : "150", + "type" : "owl:objectProperty" + }, { + "id" : "557", + "type" : "owl:datatypeProperty" + }, { + "id" : "317", + "type" : "owl:objectProperty" + }, { + "id" : "558", + "type" : "owl:datatypeProperty" + }, { + "id" : "161", + "type" : "owl:objectProperty" + }, { + "id" : "556", + "type" : "owl:objectProperty" + }, { + "id" : "560", + "type" : "owl:objectProperty" + }, { + "id" : "284", + "type" : "owl:objectProperty" + }, { + "id" : "232", + "type" : "owl:objectProperty" + }, { + "id" : "532", + "type" : "owl:objectProperty" + }, { + "id" : "199", + "type" : "owl:objectProperty" + }, { + "id" : "49", + "type" : "owl:objectProperty" + }, { + "id" : "258", + "type" : "owl:objectProperty" + }, { + "id" : "550", + "type" : "owl:objectProperty" + }, { + "id" : "201", + "type" : "owl:objectProperty" + }, { + "id" : "465", + "type" : "owl:objectProperty" + }, { + "id" : "540", + "type" : "owl:objectProperty" + }, { + "id" : "246", + "type" : "owl:objectProperty" + }, { + "id" : "562", + "type" : "owl:objectProperty" + }, { + "id" : "180", + "type" : "owl:objectProperty" + }, { + "id" : "563", + "type" : "owl:objectProperty" + }, { + "id" : "565", + "type" : "owl:datatypeProperty" + }, { + "id" : "561", + "type" : "owl:objectProperty" + }, { + "id" : "517", + "type" : "owl:objectProperty" + }, { + "id" : "283", + "type" : "owl:objectProperty" + }, { + "id" : "464", + "type" : "owl:objectProperty" + }, { + "id" : "395", + "type" : "owl:objectProperty" + }, { + "id" : "373", + "type" : "owl:objectProperty" + }, { + "id" : "564", + "type" : "owl:objectProperty" + }, { + "id" : "412", + "type" : "owl:objectProperty" + }, { + "id" : "467", + "type" : "owl:objectProperty" + }, { + "id" : "541", + "type" : "owl:objectProperty" + }, { + "id" : "229", + "type" : "owl:objectProperty" + }, { + "id" : "145", + "type" : "owl:objectProperty" + }, { + "id" : "37", + "type" : "owl:objectProperty" + }, { + "id" : "547", + "type" : "owl:objectProperty" + }, { + "id" : "375", + "type" : "owl:objectProperty" + }, { + "id" : "148", + "type" : "owl:objectProperty" + }, { + "id" : "527", + "type" : "owl:objectProperty" + }, { + "id" : "549", + "type" : "owl:objectProperty" + }, { + "id" : "568", + "type" : "owl:objectProperty" + }, { + "id" : "525", + "type" : "owl:objectProperty" + }, { + "id" : "250", + "type" : "owl:objectProperty" + }, { + "id" : "316", + "type" : "owl:objectProperty" + }, { + "id" : "531", + "type" : "owl:objectProperty" + }, { + "id" : "274", + "type" : "owl:objectProperty" + }, { + "id" : "297", + "type" : "owl:objectProperty" + }, { + "id" : "338", + "type" : "owl:objectProperty" + }, { + "id" : "569", + "type" : "owl:datatypeProperty" + }, { + "id" : "499", + "type" : "owl:objectProperty" + }, { + "id" : "240", + "type" : "owl:objectProperty" + }, { + "id" : "413", + "type" : "owl:objectProperty" + }, { + "id" : "572", + "type" : "owl:datatypeProperty" + }, { + "id" : "384", + "type" : "owl:objectProperty" + }, { + "id" : "182", + "type" : "owl:objectProperty" + }, { + "id" : "519", + "type" : "owl:objectProperty" + }, { + "id" : "211", + "type" : "owl:objectProperty" + }, { + "id" : "149", + "type" : "owl:objectProperty" + }, { + "id" : "432", + "type" : "owl:objectProperty" + }, { + "id" : "235", + "type" : "owl:objectProperty" + }, { + "id" : "567", + "type" : "owl:objectProperty" + }, { + "id" : "439", + "type" : "owl:objectProperty" + }, { + "id" : "544", + "type" : "owl:objectProperty" + }, { + "id" : "441", + "type" : "owl:objectProperty" + }, { + "id" : "268", + "type" : "owl:objectProperty" + }, { + "id" : "468", + "type" : "owl:objectProperty" + }, { + "id" : "377", + "type" : "owl:objectProperty" + }, { + "id" : "92", + "type" : "owl:objectProperty" + }, { + "id" : "536", + "type" : "owl:objectProperty" + }, { + "id" : "303", + "type" : "owl:objectProperty" + }, { + "id" : "187", + "type" : "owl:objectProperty" + }, { + "id" : "571", + "type" : "owl:objectProperty" + }, { + "id" : "489", + "type" : "owl:objectProperty" + }, { + "id" : "103", + "type" : "owl:objectProperty" + }, { + "id" : "435", + "type" : "owl:objectProperty" + } ], + "propertyAttribute" : [ { + "range" : "2", + "domain" : "1", + "attributes" : [ "anonymous", "object" ], + "id" : "0" + }, { + "range" : "2", + "domain" : "8", + "attributes" : [ "anonymous", "object" ], + "id" : "7" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P112_diminished", + "inverse" : "12", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "11", + "label" : { + "de" : "verminderte", + "IRI-based" : "P112_diminished", + "ru" : "уменьшил", + "pt" : "diminuiu", + "el" : "εξάλειψε", + "en" : "diminished", + "fr" : "a diminué", + "zh" : "减少了" + }, + "superproperty" : [ "13" ], + "domain" : "10", + "comment" : { + "en" : "This property identifies the instance of E18 Physical Thing that was diminished by an instance of E80 Part Removal.\nAlthough an instance of E80 Part removal activity normally concerns only one instance of E18 Physical Thing, it is possible to imagine circumstances under which more than one item might be diminished by a single instance of E80 Part Removal activity." + }, + "attributes" : [ "object", "external" ], + "id" : "9" + }, { + "range" : "2", + "domain" : "15", + "attributes" : [ "anonymous", "object" ], + "id" : "14" + }, { + "range" : "2", + "domain" : "17", + "attributes" : [ "anonymous", "object" ], + "id" : "16" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P99_dissolved", + "inverse" : "21", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "20", + "label" : { + "de" : "löste auf", + "IRI-based" : "P99_dissolved", + "ru" : "распустил", + "pt" : "dissolveu", + "el" : "διέλυσε", + "en" : "dissolved", + "fr" : "a dissous", + "zh" : "解散了" + }, + "superproperty" : [ "22", "23" ], + "domain" : "19", + "comment" : { + "en" : "This property associates the instance of E68 Dissolution with the instance of E74 Group that it disbanded." + }, + "attributes" : [ "object", "external" ], + "id" : "18" + }, { + "range" : "26", + "domain" : "25", + "attributes" : [ "anonymous", "object" ], + "id" : "24" + }, { + "range" : "26", + "domain" : "28", + "attributes" : [ "anonymous", "object" ], + "id" : "27" + }, { + "range" : "31", + "domain" : "30", + "attributes" : [ "anonymous", "object" ], + "id" : "29" + }, { + "range" : "6", + "domain" : "33", + "attributes" : [ "anonymous", "object" ], + "id" : "32" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P91i_is_unit_of", + "inverse" : "37", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "36", + "label" : { + "de" : "ist Einheit von", + "IRI-based" : "P91i_is_unit_of", + "ru" : "является единицей для", + "pt" : "é unidade de", + "el" : "αποτελεί μονάδα μέτρησης του/της", + "en" : "is unit of", + "fr" : "est l'unité de", + "zh" : "所属单位" + }, + "domain" : "35", + "subproperty" : [ "38" ], + "attributes" : [ "object", "external" ], + "id" : "34" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P62i_is_depicted_by", + "inverse" : "42", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "41", + "label" : { + "de" : "wird abgebildet durch", + "IRI-based" : "P62i_is_depicted_by", + "ru" : "описан посредством", + "pt" : "é retratada por", + "el" : "απεικονίζεται σε", + "en" : "is depicted by", + "fr" : "est figurée sur", + "zh" : "被描绘" + }, + "domain" : "40", + "attributes" : [ "object", "external" ], + "id" : "39" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P19i_was_made_for", + "inverse" : "46", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "45", + "label" : { + "de" : "wurde hergestellt für", + "IRI-based" : "P19i_was_made_for", + "ru" : "был создан для", + "pt" : "foi feito para", + "el" : "έγινε για", + "en" : "was made for", + "fr" : "a été fabriquée pour", + "zh" : "用于" + }, + "domain" : "44", + "attributes" : [ "object", "external" ], + "id" : "43" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P134_continued", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "45", + "label" : { + "de" : "setzte sich fort in", + "IRI-based" : "P134_continued", + "ru" : "продолжил", + "pt" : "continuou", + "el" : "συνέχισε", + "en" : "continued", + "fr" : "est la suite de", + "zh" : "继续" + }, + "superproperty" : [ "48", "49" ], + "domain" : "45", + "comment" : { + "en" : "This property associates two instances of E7 Activity, where the domain is considered as an intentional continuation of the range. A continuation of an activity may happen when the continued activity is still ongoing or after the continued activity has completely ended. The continuing activity may have started already before it decided to continue the other one. Continuation implies a coherence of intentions and outcomes of the involved activities.\nThis property is not transitive. This property is asymmetric." + }, + "attributes" : [ "object", "external" ], + "id" : "47" + }, { + "iri" : "http://w3id.org/vir#K10_on_the_base_of", + "baseIri" : "http://w3id.org/vir", + "range" : "3", + "label" : { + "IRI-based" : "K10_on_the_base_of", + "undefined" : "On the base of" + }, + "superproperty" : [ "52" ], + "domain" : "51", + "comment" : { + "undefined" : "The property describes the source used for the status assignment" + }, + "attributes" : [ "object" ], + "id" : "50" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P148i_is_component_of", + "inverse" : "54", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "3", + "label" : { + "de" : "ist Bestandteil von", + "IRI-based" : "P148i_is_component_of", + "en" : "is component of", + "zh" : "是组件" + }, + "domain" : "3", + "subproperty" : [ "55" ], + "attributes" : [ "object", "external" ], + "id" : "53" + }, { + "range" : "58", + "domain" : "57", + "attributes" : [ "anonymous", "object" ], + "id" : "56" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P24i_changed_ownership_through", + "inverse" : "61", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "60", + "label" : { + "de" : "ging über in Besitz durch", + "IRI-based" : "P24i_changed_ownership_through", + "ru" : "сменил владельца через", + "pt" : "mudou de proprietário por meio de", + "el" : "άλλαξε ιδιοκτησία μέσω", + "en" : "changed ownership through", + "fr" : "a changé de mains du fait de", + "zh" : "变更所有权" + }, + "domain" : "11", + "attributes" : [ "object", "external" ], + "id" : "59" + }, { + "range" : "2", + "domain" : "63", + "attributes" : [ "anonymous", "object" ], + "id" : "62" + }, { + "range" : "35", + "domain" : "65", + "attributes" : [ "anonymous", "object" ], + "id" : "64" + }, { + "range" : "68", + "domain" : "67", + "attributes" : [ "anonymous", "object" ], + "id" : "66" + }, { + "range" : "71", + "domain" : "19", + "attributes" : [ "anonymous", "object" ], + "id" : "70" + }, { + "range" : "71", + "domain" : "73", + "attributes" : [ "anonymous", "object" ], + "id" : "72" + }, { + "range" : "71", + "domain" : "75", + "attributes" : [ "anonymous", "object" ], + "id" : "74" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P143_joined", + "inverse" : "79", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "78", + "label" : { + "de" : "verband", + "IRI-based" : "P143_joined", + "en" : "joined", + "zh" : "加入" + }, + "superproperty" : [ "22" ], + "domain" : "77", + "comment" : { + "en" : "This property identifies the instance of E39 Actor that becomes member of an instance of E74 Group in an instance of E85 Joining.\nJoining events allow for describing actors becoming members of a group with the more detailed path E74 Group, P144i gained member by, E85 Joining, P143 joined, E39 Actor, compared to the shortcut offered by P107 has current or former member (is current or former member of)." + }, + "attributes" : [ "object", "external" ], + "id" : "76" + }, { + "range" : "71", + "domain" : "17", + "attributes" : [ "anonymous", "object" ], + "id" : "80" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P81a_end_of_the_begin", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "83", + "label" : { + "de" : "Ende des Anfangs", + "IRI-based" : "P81a_end_of_the_begin", + "ru" : "конец начала", + "pt" : "fim do início", + "el" : "τέλος της αρχής", + "en" : "end of the begin", + "fr" : "fin du début" + }, + "domain" : "82", + "attributes" : [ "datatype", "external" ], + "id" : "81" + }, { + "range" : "86", + "domain" : "85", + "attributes" : [ "anonymous", "object" ], + "id" : "84" + }, { + "range" : "89", + "domain" : "88", + "attributes" : [ "anonymous", "object" ], + "id" : "87" + }, { + "range" : "89", + "domain" : "44", + "attributes" : [ "anonymous", "object" ], + "id" : "90" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P129i_is_subject_of", + "inverse" : "92", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "3", + "label" : { + "de" : "wird behandelt in", + "IRI-based" : "P129i_is_subject_of", + "ru" : "является предметом для", + "pt" : "é assunto de", + "el" : "είναι θέμα του/της", + "en" : "is subject of", + "fr" : "est le sujet de", + "zh" : "是主题" + }, + "superproperty" : [ "93" ], + "domain" : "40", + "attributes" : [ "object", "external" ], + "id" : "91" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P170i_time_is_defined_by", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "95", + "label" : { + "IRI-based" : "P170i_time_is_defined_by", + "en" : "time is defined by" + }, + "domain" : "82", + "comment" : { + "en" : "Scope note for 'P170': This property associates an instance of E61 Time Primitive with the instance of E52 Time-Span that constitutes the interpretation of the terms of the time primitive as an extent in absolute, real time.\nThe quantification allows several instances of E61 Time Primitive that are each expressed in different syntactic forms, to define the same instance of E52 Time-Span." + }, + "attributes" : [ "datatype", "external" ], + "id" : "94" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P68i_use_foreseen_by", + "inverse" : "98", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "31", + "label" : { + "de" : "vorgesehen für Gebrauch durch defined", + "IRI-based" : "P68i_use_foreseen_by", + "ru" : "обычно используется посредством", + "pt" : "é empregado por", + "el" : "συνήθως χρησιμοποιείται από", + "en" : "use foreseen by", + "fr" : "est habituellement utilisé par", + "zh" : "被预知使用" + }, + "superproperty" : [ "93" ], + "domain" : "97", + "attributes" : [ "object", "external" ], + "id" : "96" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P74_has_current_or_former_residence", + "inverse" : "101", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "100", + "label" : { + "de" : "hat derzeitigen oder früheren Sitz", + "IRI-based" : "P74_has_current_or_former_residence", + "ru" : "имеет текущее или бывшее местожительства", + "pt" : "reside ou residiu em", + "el" : "έχει ή είχε κατοικία", + "en" : "has current or former residence", + "fr" : "réside ou a résidé à", + "zh" : "有当前或曾经居住地" + }, + "domain" : "78", + "comment" : { + "en" : "This property describes the current or former place of residence (an instance of E53 Place) of an instance of E39 Actor.\nThe residence may be either the place where the actor resides, or a legally registered address of any kind." + }, + "attributes" : [ "object", "external" ], + "id" : "99" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P191_had_duration", + "inverse" : "103", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "36", + "label" : { + "IRI-based" : "P191_had_duration", + "en" : "had duration" + }, + "domain" : "82", + "comment" : { + "en" : "This property describes the length of time covered by an instance of E52 Time-Span. It allows an instance of E52 Time-Span to be associated with an instance of E54 Dimension representing duration independent from the actual beginning and end. Indeterminacy of the duration value can be expressed by assigning a numerical interval to the property P90 has value of E54 Dimension." + }, + "attributes" : [ "object", "external" ], + "id" : "102" + }, { + "iri" : "http://w3id.org/vir#K21_depict_things_of_type", + "baseIri" : "http://w3id.org/vir", + "range" : "108", + "label" : { + "IRI-based" : "K21_depict_things_of_type", + "undefined" : "depict things of type" + }, + "superproperty" : [ "109" ], + "domain" : "30", + "comment" : { + "undefined" : "This property indicates the type of object depicted by an iconographical attribute" + }, + "attributes" : [ "object" ], + "id" : "107" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P98_brought_into_life", + "inverse" : "112", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "111", + "label" : { + "de" : "brachte zur Welt", + "IRI-based" : "P98_brought_into_life", + "ru" : "породил", + "pt" : "trouxe à vida", + "el" : "έφερε στη ζωή", + "en" : "brought into life", + "fr" : "a donné vie à", + "zh" : "诞生了" + }, + "superproperty" : [ "113" ], + "domain" : "15", + "comment" : { + "en" : "This property links an instance of E67 Birth event to an instance of E21 Person in the role of offspring.\nTwins, triplets etc. are brought into life by the same instance of E67 Birth. This is not intended for use with general Natural History material, only people. There is no explicit method for modelling conception and gestation except by using extensions." + }, + "attributes" : [ "object", "external" ], + "id" : "110" + }, { + "range" : "116", + "domain" : "115", + "attributes" : [ "anonymous", "object" ], + "id" : "114" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P28_custody_surrendered_by", + "inverse" : "121", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "78", + "label" : { + "de" : "übergab Gewahrsam an", + "IRI-based" : "P28_custody_surrendered_by", + "ru" : "опека отдана", + "pt" : "custódia concedida por", + "el" : "μετεβίβασε κατοχή από", + "en" : "custody surrendered by", + "fr" : "changement de détenteur au détriment de", + "zh" : "监护权转自" + }, + "superproperty" : [ "122" ], + "domain" : "120", + "comment" : { + "en" : "This property identifies the instance(s) of E39 Actor who surrender custody of an instance of E18 Physical Thing in an instance of E10 Transfer of Custody.\nThe property will typically describe an Actor surrendering custody of an object when it is handed over to someone else’s care. On occasion, physical custody may be surrendered involuntarily – through accident, loss or theft.\nIn reality, custody is either transferred to someone or from someone, or both." + }, + "attributes" : [ "object", "external" ], + "id" : "119" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P4i_is_time-span_of", + "inverse" : "124", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "116", + "label" : { + "de" : "ist Zeitspanne von", + "IRI-based" : "P4i_is_time-span_of", + "ru" : "является временным отрезком для", + "pt" : "é o período de tempo de", + "el" : "είναι χρονικό διάστημα του/της", + "en" : "is time-span of", + "fr" : "est la durée de", + "zh" : "是时段" + }, + "domain" : "82", + "attributes" : [ "object", "external" ], + "id" : "123" + }, { + "iri" : "http://w3id.org/vir#K22i_is_present_in", + "baseIri" : "http://w3id.org/vir", + "range" : "126", + "label" : { + "IRI-based" : "K22i_is_present_in", + "undefined" : "is present in" + }, + "superproperty" : [ "127" ], + "domain" : "86", + "comment" : { + "undefined" : "This property indicates the membership of a personification in an iconographical object" + }, + "attributes" : [ "object" ], + "id" : "125" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P33i_was_used_by", + "inverse" : "129", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "45", + "label" : { + "de" : "wurde benutzt von", + "IRI-based" : "P33i_was_used_by", + "ru" : "был использован посредством", + "pt" : "foi usada por", + "el" : "χρησιμοποιήθηκε για", + "en" : "was used by", + "fr" : "a été employée par", + "zh" : "被使用" + }, + "superproperty" : [ "130" ], + "domain" : "31", + "subproperty" : [ "131" ], + "attributes" : [ "object", "external" ], + "id" : "128" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P62_depicts", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "40", + "label" : { + "de" : "bildet ab", + "IRI-based" : "P62_depicts", + "ru" : "описывает", + "pt" : "retrata", + "el" : "απεικονίζει", + "en" : "depicts", + "fr" : "figure", + "zh" : "描绘了" + }, + "domain" : "41", + "comment" : { + "en" : "This property identifies something that is depicted by an instance of E24 Physical Human-Made Thing. Depicting is meant in the sense that an instance of E24 Physical Human-Made Thing intentionally shows, through its optical qualities or form, a representation of the entity depicted. Photographs are by default regarded as being intentional in this sense. Anything that is designed to change the properties of the depiction, such as an e-book reader, is specifically excluded. The property does not pertain to inscriptions or any other information encoding.\nThis property is a shortcut of the more fully developed path from E24 Physical Human-Made Thing through P65 shows visual item, E36 Visual Item, P138 represents to E1 CRM Entity. P62.1 mode of depiction allows the nature of the depiction to be refined." + }, + "attributes" : [ "object", "external" ], + "id" : "42" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P15i_influenced", + "inverse" : "49", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "45", + "label" : { + "de" : "beeinflußte", + "IRI-based" : "P15i_influenced", + "ru" : "оказал влияние на", + "pt" : "influenciou", + "el" : "επηρέασε", + "en" : "influenced", + "fr" : "a influencé", + "zh" : "影响" + }, + "domain" : "40", + "subproperty" : [ "137", "130", "138", "139" ], + "attributes" : [ "object", "external" ], + "id" : "136" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P184_ends_before_or_with_the_end_of", + "inverse" : "141", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "116", + "label" : { + "IRI-based" : "P184_ends_before_or_with_the_end_of", + "en" : "ends before or with the end of" + }, + "superproperty" : [ "142" ], + "domain" : "116", + "subproperty" : [ "143" ], + "comment" : { + "en" : "This property specifies that the temporal extent of the domain instance A of E2 Temporal Entity ends before or simultaneously with the end of the temporal extent of the range instance B of E2 Temporal Entity.\nIn other words, if A = [A-start, A-end] and B = [B-start, B-end], we mean A-end ≤ B-end is true.\nThis property is part of the set of temporal primitives P173 – P176, P182 – P185.\nThis property corresponds to a disjunction (logical OR) of the following Allen temporal relations (Allen, 1983): {before, meets, overlaps, finished by, start, equals, during, finishes}.\nThis property is irreflexive\n\nFigure 20: Temporal entity A ends before or with the end of temporal entity B. Here A is longer than B\n\nFigure 21: Temporal entity A ends before or with the end of temporal entity B. Here A is shorter than B" + }, + "attributes" : [ "object", "external" ], + "id" : "140" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P73i_is_translation_of", + "inverse" : "145", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "33", + "label" : { + "de" : "ist Übersetzung von", + "IRI-based" : "P73i_is_translation_of", + "ru" : "является переводом", + "pt" : "é tradução de", + "el" : "είναι μετάφραση του/της", + "en" : "is translation of", + "fr" : "est la traduction de", + "zh" : "是译文" + }, + "superproperty" : [ "146" ], + "domain" : "33", + "attributes" : [ "object", "external" ], + "id" : "144" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P29i_received_custody_through", + "inverse" : "148", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "120", + "label" : { + "de" : "erhielt Gewahrsam durch", + "IRI-based" : "P29i_received_custody_through", + "ru" : "получил опеку через", + "pt" : "início da custódia por meio de", + "el" : "παρέλαβε κατοχή μέσω", + "en" : "received custody through", + "fr" : "est devenu détenteur grâce à", + "zh" : "获得监护权" + }, + "superproperty" : [ "149" ], + "domain" : "78", + "attributes" : [ "object", "external" ], + "id" : "147" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P130_shows_features_of", + "inverse" : "150", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "89", + "label" : { + "de" : "zeigt Merkmale von", + "IRI-based" : "P130_shows_features_of", + "ru" : "демонстрирует признаки", + "pt" : "apresenta características de", + "el" : "παρουσιάζει χαρακτηριστικά του/της", + "en" : "shows features of", + "fr" : "présente des caractéristiques de", + "zh" : "显示特征" + }, + "domain" : "89", + "subproperty" : [ "144", "151" ], + "comment" : { + "en" : "This property generalises the notions of \"copy of\" and \"similar to\" into a directed relationship, where the domain expresses the derivative or influenced item and the range the source or influencing item, if such a direction can be established. The property can also be used to express similarity in cases that can be stated between two objects only, without historical knowledge about its reasons. The property expresses a symmetric relationship in case no direction of influence can be established either from evidence on the item itself or from historical knowledge. This holds in particular for siblings of a derivation process from a common source or non-causal cultural parallels, such as some weaving patterns.\nThe P130.1 kind of similarity property of the P130 shows features of (features are also found on) property enables the relationship between the domain and the range to be further clarified, in the sense from domain to range, if applicable. For example, it may be expressed if both items are product “of the same mould”, or if two texts “contain identical paragraphs”.\nIf the reason for similarity is a sort of derivation process, i.e., that the creator has used or had in mind the form of a particular thing during the creation or production, this process should be explicitly modelled. In these cases, P130 shows features of can be regarded as a shortcut of such a process. However, the current model does not contain any path specific enough to infer this property. Specializations of the CIDOC CRM may however be more explicit, for instance describing the use of moulds etc.\nThis property is not transitive. This property is irreflexive." + }, + "attributes" : [ "object", "external" ], + "id" : "146" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P165_incorporates", + "inverse" : "153", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "132", + "label" : { + "IRI-based" : "P165_incorporates", + "en" : "incorporates" + }, + "superproperty" : [ "154" ], + "domain" : "6", + "comment" : { + "en" : "This property associates an instance of E73 Information Object with an instance of E90 Symbolic Object (or any of its subclasses) that was included in it.\nThis property makes it possible to recognise the autonomous status of the incorporated signs, which were created in a distinct context, and can be incorporated in many instances of E73 Information Object, and to highlight the difference between structural and accidental whole-part relationships between conceptual entities.\nIt accounts for many cultural facts that are quite frequent and significant: the inclusion of a poem in an anthology, the re-use of an operatic aria in a new opera, the use of a reproduction of a painting for a book cover or a CD booklet, the integration of textual quotations, the presence of lyrics in a song that sets those lyrics to music, the presence of the text of a play in a movie based on that play, etc.\nIn particular, this property allows for modelling relationships of different levels of symbolic specificity, such as the natural language words making up a particular text, the characters making up the words and punctuation, the choice of fonts and page layout for the characters.\nWhen restricted to information objects, that is, seen as a property with E73 Information Object as domain and range the property is transitive.\nA digital photograph of a manuscript page incorporates the text of a manuscript page, if the respective text is defined as a sequence of symbols of a particular type, such as Latin characters, and the resolution and quality of the digital image is sufficient to resolve these symbols so they are readable on the digital image.\nThis property is asymmetric." + }, + "attributes" : [ "object", "external" ], + "id" : "152" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P38_deassigned", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "157", + "label" : { + "de" : "hob Zuweisung auf von", + "IRI-based" : "P38_deassigned", + "ru" : "отменил назначение", + "pt" : "retirou a atribuição do", + "el" : "ακύρωσε", + "en" : "deassigned", + "fr" : "a désattribué", + "zh" : "取消了" + }, + "superproperty" : [ "158" ], + "domain" : "156", + "comment" : { + "en" : "This property records the identifier that was deassigned from an instance of E1 CRM Entity.\nDe-assignment of an identifier may be necessary when an item is taken out of an inventory, a new numbering system is introduced or items are merged or split up.\nThe same identifier may be deassigned on more than one occasion." + }, + "attributes" : [ "object", "external" ], + "id" : "155" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P27i_was_origin_of", + "inverse" : "161", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "160", + "label" : { + "de" : "war Ausgangsort von", + "IRI-based" : "P27i_was_origin_of", + "ru" : "был исходной точкой для", + "pt" : "era origem de", + "el" : "ήταν αφετηρία του/της", + "en" : "was origin of", + "fr" : "a été l'origine de", + "zh" : "是起点" + }, + "domain" : "100", + "attributes" : [ "object", "external" ], + "id" : "159" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P124_transformed", + "inverse" : "163", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "11", + "label" : { + "de" : "wandelte um", + "IRI-based" : "P124_transformed", + "ru" : "трансформировал", + "pt" : "transformou", + "el" : "μετέτρεψε", + "en" : "transformed", + "fr" : "a transformé", + "zh" : "转变了" + }, + "superproperty" : [ "23" ], + "domain" : "17", + "comment" : { + "en" : "This property identifies the instance or instances E18 Physical Thing that have ceased to exist due to an instance of E81 Transformation.\nThe item that has ceased to exist and was replaced by the result of the Transformation. The continuity between both items, the new and the old, is expressed by the links to the common instance of E81 Transformation." + }, + "attributes" : [ "object", "external" ], + "id" : "162" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P22i_acquired_title_through", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "60", + "label" : { + "de" : "erwarb Besitztitel durch", + "IRI-based" : "P22i_acquired_title_through", + "ru" : "получил право собственности через", + "pt" : "adquiriu os direitos de propriedade por meio da", + "el" : "απέκτησε τον τίτλο μέσω", + "en" : "acquired title through", + "fr" : "a acquis le droit de propriété du fait de", + "zh" : "获得所有权" + }, + "superproperty" : [ "149" ], + "domain" : "78", + "attributes" : [ "object", "external" ], + "id" : "164" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P49i_is_former_or_current_keeper_of", + "inverse" : "166", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "11", + "label" : { + "de" : "ist früherer oder derzeitiger Betreuer von", + "IRI-based" : "P49i_is_former_or_current_keeper_of", + "ru" : "является бывшим или текущим смотрителем для", + "pt" : "é ou foi guardador de", + "el" : "κατέχει ή κατείχε", + "en" : "is former or current keeper of", + "fr" : "est ou a été détenteur de", + "zh" : "是以往或当前保管者" + }, + "domain" : "78", + "subproperty" : [ "167", "168" ], + "attributes" : [ "object", "external" ], + "id" : "165" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P55_has_current_location", + "inverse" : "170", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "100", + "label" : { + "de" : "hat derzeitigen Standort", + "IRI-based" : "P55_has_current_location", + "ru" : "в данный момент находится в", + "pt" : "é localizado em", + "el" : "βρίσκεται σε", + "en" : "has current location", + "fr" : "a pour localisation actuelle", + "zh" : "有当前位置" + }, + "superproperty" : [ "171" ], + "domain" : "134", + "comment" : { + "en" : "This property records the location of an instance of E19 Physical Object at the time of validity of the record or database containing the statement that uses this property.\nThis property is a specialisation of P53 has former or current location (is former or current location of). It indicates that the instance of E53 Place associated with the instance of E19 Physical Object is the current location of the object. The property does not allow any indication of how long the object has been at the current location.\nThis property is a shortcut. A more detailed representation can make use of the fully developed (i.e., indirect) path from E19 Physical Object, through, P25i moved by, E9 Move, P26 moved to to E53 Place if and only if this Move is the most recent." + }, + "attributes" : [ "object", "external" ], + "id" : "169" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P167_was_within", + "inverse" : "174", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "100", + "label" : { + "IRI-based" : "P167_was_within", + "en" : "was within" + }, + "domain" : "173", + "comment" : { + "en" : "This property associates an instance of E93 Presence with an instance of E53 Place that geometrically includes the spatial projection of the respective instance of E93 Presence. Besides others, this property may be used to state in which space an object has been for some known time, such as a room of a castle or in a drawer. It may also be used to describe a confinement of the spatial extent of some realm during a known time-span.\nThis property is a shortcut of the more fully developed path from E93 Presence through P161 has spatial projection, E53 Place, P89 falls within (contains) to E53 Place." + }, + "attributes" : [ "object", "external" ], + "id" : "172" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P89_falls_within", + "inverse" : "176", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "100", + "label" : { + "de" : "fällt in", + "IRI-based" : "P89_falls_within", + "ru" : "содержится в", + "pt" : "está contido em", + "el" : "περιέχεται σε", + "en" : "falls within", + "fr" : "s’insère dans", + "zh" : "位于" + }, + "domain" : "100", + "comment" : { + "en" : "This property identifies an instance of E53 Place that falls wholly within the extent of another instance of E53 Place.\nIt addresses spatial containment only and does not imply any relationship between things or phenomena occupying these places.\nThis property is transitive and reflexive." + }, + "attributes" : [ "object", "external" ], + "id" : "175" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P33_used_specific_technique", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "31", + "label" : { + "de" : "benutzte das bestimmte Verfahren", + "IRI-based" : "P33_used_specific_technique", + "ru" : "использовал особую технику", + "pt" : "usou técnica específica", + "el" : "χρησιμοποίησε συγκεκριμένη τεχνική", + "en" : "used specific technique", + "fr" : "a employé comme technique spécifique", + "zh" : "使用特定技术" + }, + "superproperty" : [ "52" ], + "domain" : "45", + "subproperty" : [ "177" ], + "comment" : { + "en" : "This property identifies a specific instance of E29 Design or Procedure in order to carry out an instance of E7 Activity or parts of it.\nThe property differs from P32 used general technique (was technique of) in that P33 refers to an instance of E29 Design or Procedure, which is a concrete information object in its own right rather than simply being a term or a method known by tradition.\nTypical examples would include intervention plans for conservation or the construction plans of a building." + }, + "attributes" : [ "object", "external" ], + "id" : "129" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P111i_was_added_by", + "inverse" : "180", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "179", + "label" : { + "de" : "wurde hinzugefügt durch", + "IRI-based" : "P111i_was_added_by", + "ru" : "был добавлен посредством", + "pt" : "foi adicionado por", + "el" : "προστέθηκε από", + "en" : "was added by", + "fr" : "a été ajouté par", + "zh" : "被增加" + }, + "superproperty" : [ "130" ], + "domain" : "11", + "attributes" : [ "object", "external" ], + "id" : "178" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P142i_was_used_in", + "inverse" : "182", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "156", + "label" : { + "de" : "wurde benutzt in", + "IRI-based" : "P142i_was_used_in", + "en" : "was used in", + "zh" : "用于" + }, + "superproperty" : [ "130" ], + "domain" : "132", + "attributes" : [ "object", "external" ], + "id" : "181" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P32i_was_technique_of", + "inverse" : "185", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "45", + "label" : { + "de" : "war Verfahren von", + "IRI-based" : "P32i_was_technique_of", + "ru" : "был техникой для", + "pt" : "foi técnica da", + "el" : "ήταν τεχνική του/της", + "en" : "was technique of", + "fr" : "a été la technique mise en œuvre dans", + "zh" : "是技术" + }, + "superproperty" : [ "186" ], + "domain" : "108", + "attributes" : [ "object", "external" ], + "id" : "184" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P16_used_specific_object", + "inverse" : "130", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "89", + "label" : { + "de" : "benutzte das bestimmte Objekt", + "IRI-based" : "P16_used_specific_object", + "ru" : "использовал особый объект", + "pt" : "usou objeto específico", + "el" : "χρησιμοποίησε αντικείμενο", + "en" : "used specific object", + "fr" : "a utilisé l'objet spécifique", + "zh" : "使用特定对象" + }, + "superproperty" : [ "187", "49" ], + "domain" : "45", + "subproperty" : [ "129", "180", "50", "182" ], + "comment" : { + "en" : "This property describes the use of material or immaterial things in a way essential to the performance or the outcome of an instance of E7 Activity.\nThis property typically applies to tools, instruments, moulds, raw materials and items embedded in a product. It implies that the presence of the object in question was a necessary condition for the action. For example, the activity of writing this text required the use of a computer. An immaterial thing can be used if at least one of its carriers is present. For example, the software tools on a computer.\nAnother example is the use of a particular name by a particular group of people over some span to identify a thing, such as a settlement. In this case, the physical carriers of this name are at least the people understanding its use." + }, + "attributes" : [ "object", "external" ], + "id" : "52" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P157_is_at_rest_relative_to", + "inverse" : "189", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "11", + "label" : { + "IRI-based" : "P157_is_at_rest_relative_to", + "en" : "is at rest relative to" + }, + "domain" : "100", + "subproperty" : [ "190", "191" ], + "comment" : { + "en" : "This property associates an instance of E53 Place with the instance of E18 Physical Thing that determines a reference space for this instance of E53 Place by being at rest with respect to this reference space. The relative stability of form of an instance of E18 Physical Thing defines its default reference space. The reference space is not spatially limited to the referred thing. For example, a ship determines a reference space in terms of which other ships in its neighbourhood may be described. Larger constellations of matter, such as continental plates, may comprise many physical features that are at rest with them and define the same reference space." + }, + "attributes" : [ "object", "external" ], + "id" : "188" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P108i_was_produced_by", + "inverse" : "193", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "1", + "label" : { + "de" : "wurde hergestellt durch", + "IRI-based" : "P108i_was_produced_by", + "ru" : "был произведен посредством", + "pt" : "foi produzido por", + "el" : "παρήχθη από", + "en" : "was produced by", + "fr" : "a été produit par", + "zh" : "被产生" + }, + "superproperty" : [ "194", "195" ], + "domain" : "41", + "attributes" : [ "object", "external" ], + "id" : "192" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P16i_was_used_for", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "45", + "label" : { + "de" : "wurde benutzt für", + "IRI-based" : "P16i_was_used_for", + "ru" : "был использован для", + "pt" : "foi usado por", + "el" : "χρησιμοποιήθηκε για", + "en" : "was used for", + "fr" : "a été utilisé pour", + "zh" : "用于" + }, + "superproperty" : [ "196", "136" ], + "domain" : "89", + "subproperty" : [ "128", "178", "181", "197" ], + "attributes" : [ "object", "external" ], + "id" : "130" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P11_had_participant", + "inverse" : "199", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "78", + "label" : { + "de" : "hatte Teilnehmer", + "IRI-based" : "P11_had_participant", + "ru" : "имел участника", + "pt" : "tem participante", + "el" : "είχε συμμέτοχο", + "en" : "had participant", + "fr" : "a eu pour participant", + "zh" : "有参与者" + }, + "superproperty" : [ "187" ], + "domain" : "198", + "subproperty" : [ "200", "18", "201", "202", "76", "203", "204", "122" ], + "comment" : { + "en" : "This property describes the active or passive participation of instances of E39 Actors in an instance of E5 Event.\nIt documents known events in which an instance of E39 Actor has participated during the course of that actor’s life or history. The instances of E53 Place and E52 Time-Span where and when these events happened provide us with constraints about the presence of the related instances of E39 Actor in the past. Collective actors, i.e., instances of E74 Group, may physically participate in events via their representing instances of E21 Persons only. The participation of multiple actors in an event is most likely an indication of their acquaintance and interaction.\nThe property implies that the actor was involved in the event but does not imply any causal relationship. For instance, someone having been portrayed can be said to have participated in the creation of the portrait." + }, + "attributes" : [ "object", "external" ], + "id" : "22" + }, { + "iri" : "http://w3id.org/vir#K20i_is_composed_of", + "baseIri" : "http://w3id.org/vir", + "range" : "126", + "label" : { + "IRI-based" : "K20i_is_composed_of", + "undefined" : "is composed of" + }, + "superproperty" : [ "53" ], + "domain" : "126", + "comment" : { + "undefined" : "This property put in relation a representation with a part of itself." + }, + "attributes" : [ "object" ], + "id" : "55" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P109i_is_current_or_former_curator_of", + "inverse" : "205", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "104", + "label" : { + "de" : "ist derzeitiger oder früherer Kurator von", + "IRI-based" : "P109i_is_current_or_former_curator_of", + "ru" : "является действующим или бывшим хранителем", + "pt" : "é ou foi curador de", + "el" : "είναι ή ήταν επιμελητής του/της", + "en" : "is current or former curator of", + "fr" : "est ou a été le conservateur de", + "zh" : "是当前或以往管理者" + }, + "superproperty" : [ "165" ], + "domain" : "78", + "attributes" : [ "object", "external" ], + "id" : "167" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P179i_was_sales_price_of", + "inverse" : "209", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "208", + "label" : { + "IRI-based" : "P179i_was_sales_price_of", + "en" : "was sales price of" + }, + "domain" : "207", + "attributes" : [ "object", "external" ], + "id" : "206" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P94i_was_created_by", + "inverse" : "211", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "8", + "label" : { + "de" : "wurde erschaffen durch", + "IRI-based" : "P94i_was_created_by", + "ru" : "был создан посредством", + "pt" : "foi criado por", + "el" : "δημιουργήθηκε από", + "en" : "was created by", + "fr" : "a été créé par", + "zh" : "被创建" + }, + "superproperty" : [ "194" ], + "domain" : "4", + "subproperty" : [ "212" ], + "attributes" : [ "object", "external" ], + "id" : "210" + }, { + "iri" : "http://w3id.org/vir#K34i_is_illustrated_by", + "baseIri" : "http://w3id.org/vir", + "range" : "126", + "label" : { + "IRI-based" : "K34i_is_illustrated_by", + "undefined" : "is illustrated by" + }, + "superproperty" : [ "127" ], + "domain" : "6", + "comment" : { + "undefined" : "This property associate an information object to a iconographical representation" + }, + "attributes" : [ "object" ], + "id" : "213" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P150_defines_typical_parts_of", + "inverse" : "215", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "108", + "label" : { + "IRI-based" : "P150_defines_typical_parts_of", + "en" : "defines typical parts of" + }, + "domain" : "108", + "comment" : { + "en" : "This property associates an instance of E55 Type “A” with an instance of E55 Type “B”, when items of type “A” typically form part of items of type “B”, such as “car motors” and “cars”.\nIt allows types to be organised into hierarchies based on one type describing a typical part of another. This property is equivalent to \"broader term partitive (BTP)\" as defined in ISO 2788 and “broaderPartitive” in SKOS.\nThis property is not transitive. This property is asymmetric." + }, + "attributes" : [ "object", "external" ], + "id" : "214" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P124i_was_transformed_by", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "17", + "label" : { + "de" : "wurde umgewandelt durch", + "IRI-based" : "P124i_was_transformed_by", + "ru" : "был трансформирован посредством", + "pt" : "foi transformado por", + "el" : "μετατράπηκε από", + "en" : "was transformed by", + "fr" : "a été transformé par", + "zh" : "被转变" + }, + "superproperty" : [ "216" ], + "domain" : "11", + "attributes" : [ "object", "external" ], + "id" : "163" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P75i_is_possessed_by", + "inverse" : "218", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "78", + "label" : { + "de" : "sind im Besitz von", + "IRI-based" : "P75i_is_possessed_by", + "ru" : "принадлежит", + "pt" : "são detidos por", + "el" : "κατέχεται από", + "en" : "is possessed by", + "fr" : "est détenu par", + "zh" : "被拥有" + }, + "domain" : "5", + "attributes" : [ "object", "external" ], + "id" : "217" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P90_has_value", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "222", + "label" : { + "de" : "hat Wert", + "IRI-based" : "P90_has_value", + "ru" : "имеет значение", + "pt" : "tem valor", + "el" : "έχει τιμή", + "en" : "has value", + "fr" : "a la valeur", + "zh" : "有数值" + }, + "domain" : "36", + "comment" : { + "en" : "This property allows an instance of E54 Dimension to be approximated by an instance of E60 Number primitive." + }, + "attributes" : [ "datatype", "external" ], + "id" : "221" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P48_has_preferred_identifier", + "inverse" : "224", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "157", + "label" : { + "de" : "hat bevorzugtes Kennzeichen", + "IRI-based" : "P48_has_preferred_identifier", + "ru" : "имеет предпочтительный идентификатор", + "pt" : "tem identificador preferido", + "el" : "έχει προτιμώμενο αναγνωριστικό", + "en" : "has preferred identifier", + "fr" : "a pour identificateur retenu", + "zh" : "有优选标识符" + }, + "superproperty" : [ "225" ], + "domain" : "40", + "comment" : { + "en" : "This property records the preferred instance of E42 Identifier that was used to identify an instance of E1 CRM Entity at the time this property was recorded.\nMore than one preferred identifier may have been assigned to an item over time.\nUse of this property requires an external mechanism for assigning temporal validity to the respective CIDOC CRM instance.\nThe fact that an identifier is a preferred one for an organisation can be better expressed in a context independent form by assigning a suitable instance of E55 Type to the respective instance of E15 Identifier Assignment using the P2 has type property." + }, + "attributes" : [ "object", "external" ], + "id" : "223" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P146_separated_from", + "inverse" : "227", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "20", + "label" : { + "de" : "entließ von", + "IRI-based" : "P146_separated_from", + "en" : "separated from", + "zh" : "脱离" + }, + "superproperty" : [ "22" ], + "domain" : "226", + "comment" : { + "en" : "This property identifies the instance of E74 Group an instance of E39 Actor leaves through an instance of E86 Leaving.\nAlthough a leaving activity normally concerns only one instance of E74 Group, it is possible to imagine circumstances under which leaving one E74 Group implies leaving another E74 Group as well." + }, + "attributes" : [ "object", "external" ], + "id" : "200" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P188i_is_production_tool_for", + "inverse" : "229", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "118", + "label" : { + "IRI-based" : "P188i_is_production_tool_for", + "en" : "is production tool for" + }, + "domain" : "134", + "attributes" : [ "object", "external" ], + "id" : "228" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P146i_lost_member_by", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "226", + "label" : { + "de" : "verlor Mitglied durch", + "IRI-based" : "P146i_lost_member_by", + "en" : "lost member by", + "zh" : "失去成员" + }, + "superproperty" : [ "199" ], + "domain" : "20", + "attributes" : [ "object", "external" ], + "id" : "227" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P8i_witnessed", + "inverse" : "232", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "231", + "label" : { + "de" : "bezeugte", + "IRI-based" : "P8i_witnessed", + "ru" : "являлся местом для", + "pt" : "testemunhou", + "el" : "υπήρξε τόπος του", + "en" : "witnessed", + "fr" : "a été témoin de", + "zh" : "发生过" + }, + "domain" : "11", + "attributes" : [ "object", "external" ], + "id" : "230" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P141_assigned", + "inverse" : "234", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "40", + "label" : { + "de" : "wies zu", + "IRI-based" : "P141_assigned", + "ru" : "присвоил", + "pt" : "atribuiu", + "el" : "απέδωσε", + "en" : "assigned", + "fr" : "a attribué", + "zh" : "分配" + }, + "domain" : "233", + "subproperty" : [ "155", "235", "236", "237", "238", "239" ], + "comment" : { + "en" : "This property associates an instance of E13 Attribute Assignment with the instance of E1 CRM Entity used in the attribution. The instance of E1 CRM Entity here plays the role of the range of the attribution.\nThe kind of attribution made should be documented using P177 assigned property of type (is type of property assigned)." + }, + "attributes" : [ "object", "external" ], + "id" : "158" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P98i_was_born", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "15", + "label" : { + "de" : "wurde geboren durch", + "IRI-based" : "P98i_was_born", + "ru" : "был рожден", + "pt" : "veio à vida pelo", + "el" : "γεννήθηκε", + "en" : "was born", + "fr" : "est né", + "zh" : "被诞生" + }, + "superproperty" : [ "194" ], + "domain" : "111", + "attributes" : [ "object", "external" ], + "id" : "112" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P32_used_general_technique", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "108", + "label" : { + "de" : "benutzte das allgemeine Verfahren", + "IRI-based" : "P32_used_general_technique", + "ru" : "использовал общую технику", + "pt" : "usou técnica geral", + "el" : "χρησιμοποίησε γενική τεχνική", + "en" : "used general technique", + "fr" : "a employé comme technique générique", + "zh" : "使用通用技术" + }, + "superproperty" : [ "240" ], + "domain" : "45", + "comment" : { + "en" : "This property identifies the technique or method, modelled as an instance of E55 Type, that was employed in an instance of E7 Activity.\nThese techniques should be drawn from an external E55 Type hierarchy of consistent terminology of general techniques or methods such as embroidery, oil-painting, carbon dating, etc. Specific documented techniques should be described as instances of E29 Design or Procedure." + }, + "attributes" : [ "object", "external" ], + "id" : "185" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P105i_has_right_on", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "88", + "label" : { + "de" : "hat Rechte an", + "IRI-based" : "P105i_has_right_on", + "ru" : "владеет правом на", + "pt" : "possui direitos sobre", + "el" : "έχει δικαίωμα σε", + "en" : "has right on", + "fr" : "détient un droit sur", + "zh" : "有权利" + }, + "domain" : "78", + "subproperty" : [ "243" ], + "attributes" : [ "object", "external" ], + "id" : "242" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P182i_starts_after_or_with_the_end_of", + "inverse" : "245", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "116", + "label" : { + "IRI-based" : "P182i_starts_after_or_with_the_end_of", + "en" : "starts after or with the end of" + }, + "superproperty" : [ "246", "48" ], + "domain" : "116", + "subproperty" : [ "247" ], + "attributes" : [ "object", "external" ], + "id" : "244" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P161i_is_spatial_projection_of", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "249", + "label" : { + "IRI-based" : "P161i_is_spatial_projection_of", + "en" : "is spatial projection of" + }, + "domain" : "100", + "subproperty" : [ "250" ], + "attributes" : [ "object", "external" ], + "id" : "248" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P35_has_identified", + "inverse" : "252", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "115", + "label" : { + "de" : "hat identifiziert", + "IRI-based" : "P35_has_identified", + "ru" : "идентифицировал", + "pt" : "identificou", + "el" : "έχει διαπιστώσει", + "en" : "has identified", + "fr" : "a identifié", + "zh" : "有标识" + }, + "superproperty" : [ "158" ], + "domain" : "251", + "comment" : { + "en" : "This property identifies the instance of E3 Condition State that was observed in an instance of E14 Condition Assessment activity." + }, + "attributes" : [ "object", "external" ], + "id" : "238" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P23_transferred_title_from", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "78", + "label" : { + "de" : "übertrug Besitztitel von", + "IRI-based" : "P23_transferred_title_from", + "ru" : "передал право собственности от", + "pt" : "transferiu os direitos de propriedade de", + "el" : "μετεβίβασε τον τίτλο από", + "en" : "transferred title from", + "fr" : "a fait passer le droit de propriété de", + "zh" : "转移所有权自" + }, + "superproperty" : [ "122" ], + "domain" : "60", + "comment" : { + "en" : "This property identifies the instance(s) of E39 Actor who relinquish legal ownership as the result of an instance of E8 Acquisition.\nThe property will typically be used to describe a person donating or selling an object to a museum. In reality title is either transferred to or from someone, or both." + }, + "attributes" : [ "object", "external" ], + "id" : "253" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P152i_is_parent_of", + "inverse" : "255", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "111", + "label" : { + "IRI-based" : "P152i_is_parent_of", + "en" : "is parent of" + }, + "domain" : "111", + "attributes" : [ "object", "external" ], + "id" : "254" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P74i_is_current_or_former_residence_of", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "78", + "label" : { + "de" : "ist derzeitiger oder früherer Sitz von", + "IRI-based" : "P74i_is_current_or_former_residence_of", + "ru" : "является текущим или бывшим местом жительства для", + "pt" : "é ou foi residência de", + "el" : "είναι ή ήταν κατοικία του/της", + "en" : "is current or former residence of", + "fr" : "est ou a été la résidence de", + "zh" : "是当前或曾经居住地" + }, + "domain" : "100", + "attributes" : [ "object", "external" ], + "id" : "101" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P52_has_current_owner", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "78", + "label" : { + "de" : "hat derzeitigen Besitzer", + "IRI-based" : "P52_has_current_owner", + "ru" : "имеет текущего владельца", + "pt" : "é propriedade de", + "el" : "έχει ιδιοκτήτη", + "en" : "has current owner", + "fr" : "est actuellement possédée par", + "zh" : "有当前所有者" + }, + "superproperty" : [ "257", "258" ], + "domain" : "11", + "comment" : { + "en" : "This property identifies the instance of E21 Person or E74 Group that was the owner of an instance of E18 Physical Thing at the time of validity of the record or database containing the statement that uses this property.\nThis property is a shortcut for the more detailed path from E18 Physical Thing through, P24i changed ownership through, E8 Acquisition, P22 transferred title to to E39 Actor, if and only if this acquisition event is the most recent." + }, + "attributes" : [ "object", "external" ], + "id" : "256" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P59_has_section", + "inverse" : "191", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "100", + "label" : { + "de" : "hat Bereich", + "IRI-based" : "P59_has_section", + "ru" : "имеет район", + "pt" : "tem seção", + "el" : "έχει τομέα", + "en" : "has section", + "fr" : "a pour section", + "zh" : "有区域" + }, + "superproperty" : [ "189" ], + "domain" : "11", + "comment" : { + "en" : "This property links an area, i.e., an instance of E53 Place to the instance of E18 Physical Thing upon which it is found. This area may either be identified by a name, or by a geometry in terms of a coordinate system adapted to the shape of the respective instance of E18 Physical Thing. Typically, names identifying sections of physical objects are composed of the name of a kind of part and the name of the object itself, such as \"The poop deck of H.M.S. Victory\", which is composed of \"poop deck\" and \"H.M.S. Victory\"." + }, + "attributes" : [ "object", "external" ], + "id" : "261" + }, { + "range" : "88", + "domain" : "11", + "attributes" : [ "anonymous", "object" ], + "id" : "262" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P189i_is_approximated_by", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "100", + "label" : { + "IRI-based" : "P189i_is_approximated_by", + "en" : "is approximated by" + }, + "domain" : "100", + "attributes" : [ "object", "external" ], + "id" : "263" + }, { + "range" : "36", + "domain" : "207", + "attributes" : [ "anonymous", "object" ], + "id" : "264" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P126_employed", + "inverse" : "268", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "97", + "label" : { + "de" : "verwendete", + "IRI-based" : "P126_employed", + "ru" : "использовал", + "pt" : "empregou", + "el" : "χρησιμοποίησε", + "en" : "employed", + "fr" : "a employé", + "zh" : "使用" + }, + "domain" : "267", + "comment" : { + "en" : "This property identifies the instance of E57 Material employed in an instance of E11 Modification.\nThe instance of E57 Material used during the instance of E11 Modification does not necessarily become incorporated into the instance of E24 Physical Human-Made Thing that forms the subject of the instance of E11 Modification." + }, + "attributes" : [ "object", "external" ], + "id" : "266" + }, { + "range" : "183", + "domain" : "270", + "attributes" : [ "anonymous", "object" ], + "id" : "269" + }, { + "range" : "183", + "domain" : "157", + "attributes" : [ "anonymous", "object" ], + "id" : "271" + }, { + "range" : "183", + "domain" : "265", + "attributes" : [ "anonymous", "object" ], + "id" : "272" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P40_observed_dimension", + "inverse" : "274", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "36", + "label" : { + "de" : "beobachtete Dimension", + "IRI-based" : "P40_observed_dimension", + "ru" : "определил величину", + "pt" : "verificou a dimensão", + "el" : "παρατήρησε", + "en" : "observed dimension", + "fr" : "a relevé comme dimension", + "zh" : "观测度量规格" + }, + "superproperty" : [ "158" ], + "domain" : "273", + "comment" : { + "en" : "This property records the dimension that was observed in an E16 Measurement Event.\nE54 Dimension can be any quantifiable aspect of E70 Thing. Weight, image colour depth and monetary value are dimensions in this sense. One measurement activity may determine more than one dimension of one object.\nDimensions may be determined either by direct observation or using recorded evidence. In the latter case the measured Thing does not need to be present or extant.\nEven though knowledge of the value of a dimension requires measurement, the dimension may be an object of discourse prior to, or even without, any measurement being made." + }, + "attributes" : [ "object", "external" ], + "id" : "236" + }, { + "range" : "60", + "domain" : "208", + "attributes" : [ "anonymous", "object" ], + "id" : "275" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P139_has_alternative_form", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "183", + "label" : { + "de" : "hat alternative Form", + "IRI-based" : "P139_has_alternative_form", + "ru" : "имеет альтернативную форму", + "pt" : "tem forma alternativa", + "el" : "έχει εναλλακτική μορφή", + "en" : "has alternative form", + "fr" : "a pour autre forme", + "zh" : "有交替形式" + }, + "domain" : "183", + "comment" : { + "en" : "This property associates an instance of E41 Appellation with another instance of E41 Appellation that constitutes a derivative or variant of the former and that may also be used for identifying items identified by the former, in suitable contexts, independent from the particular item to be identified. This property should not be confused with additional variants of names used characteristically for a single, particular item, such as individual nicknames. It is a directed relationship, where the range expresses the derivative or variant and the domain the source of derivation or original form of variation, if such a direction can be established. Otherwise, the relationship is symmetric.\nMultiple names assigned to an object, which do not apply to all things identified with the specific instance of E41 Appellation, should be modelled as repeated values of P1 is identified by (identifies) of this object.\nP139.1 has type allows the type of derivation to be refined, for instance “transliteration from Latin 1 to ASCII”." + }, + "attributes" : [ "object", "external" ], + "id" : "276" + }, { + "range" : "278", + "domain" : "89", + "attributes" : [ "anonymous", "object" ], + "id" : "277" + }, { + "range" : "278", + "domain" : "78", + "attributes" : [ "anonymous", "object" ], + "id" : "279" + }, { + "range" : "88", + "domain" : "132", + "attributes" : [ "anonymous", "object" ], + "id" : "280" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P110i_was_augmented_by", + "inverse" : "283", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "179", + "label" : { + "de" : "wurde erweitert durch", + "IRI-based" : "P110i_was_augmented_by", + "ru" : "был увеличен посредством", + "pt" : "foi aumentada por", + "el" : "επαυξήθηκε από", + "en" : "was augmented by", + "fr" : "a été augmenté par", + "zh" : "被增强" + }, + "superproperty" : [ "195" ], + "domain" : "11", + "attributes" : [ "object", "external" ], + "id" : "282" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P144_joined_with", + "inverse" : "284", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "20", + "label" : { + "de" : "verband mit", + "IRI-based" : "P144_joined_with", + "en" : "joined with", + "zh" : "加入" + }, + "superproperty" : [ "22" ], + "domain" : "77", + "comment" : { + "en" : "This property identifies the instance of E74 Group of which an instance of E39 Actor becomes a member through an instance of E85 Joining.\nAlthough a joining activity normally concerns only one instance of E74 Group, it is possible to imagine circumstances under which becoming member of one Group implies becoming member of another Group as well.\nJoining events allow for describing people becoming members of a group with a more detailed path from E74 Group through, P144i gained member by, E85 Joining, P143 joined, E39 Actor, compared to the shortcut offered by P107 has current or former member (is current or former member of).\nThe property P144.1 kind of member can be used to specify the type of membership or the role the member has in the group." + }, + "attributes" : [ "object", "external" ], + "id" : "204" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P127i_has_narrower_term", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "108", + "label" : { + "de" : "hat den Unterbegriff", + "IRI-based" : "P127i_has_narrower_term", + "ru" : "имеет нижестоящий термин", + "pt" : "tem termo específico", + "el" : "έχει στενότερο όρο", + "en" : "has narrower term", + "fr" : "a pour terme spécifique", + "zh" : "下位词" + }, + "domain" : "108", + "attributes" : [ "object", "external" ], + "id" : "285" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P21_had_general_purpose", + "inverse" : "287", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "108", + "label" : { + "de" : "hatte den allgemeinen Zweck", + "IRI-based" : "P21_had_general_purpose", + "ru" : "имел общую цель", + "pt" : "tinha propósito geral", + "el" : "είχε γενικό σκοπό", + "en" : "had general purpose", + "fr" : "avait pour but général", + "zh" : "有一般目的" + }, + "domain" : "45", + "comment" : { + "en" : "This property describes an intentional relationship between an instance of E7 Activity and some general goal or purpose, described as an instance of E55 Type.\nThis may involve activities intended as preparation for some type of activity or event. P21 had general purpose (was purpose of) differs from P20 had specific purpose (was purpose of) in that no occurrence of an event is implied as the purpose." + }, + "attributes" : [ "object", "external" ], + "id" : "286" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P46_is_composed_of", + "inverse" : "289", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "11", + "label" : { + "de" : "ist zusammengesetzt aus", + "IRI-based" : "P46_is_composed_of", + "ru" : "составлен из", + "pt" : "é composto de", + "el" : "αποτελείται από", + "en" : "is composed of", + "fr" : "est composée de", + "zh" : "组成成分是" + }, + "domain" : "11", + "subproperty" : [ "290", "291" ], + "comment" : { + "en" : "This property associates an instance of E18 Physical Thing with another instance of Physical Thing that forms part of it. The spatial extent of the composing part is included in the spatial extent of the whole.\nComponent elements, since they are themselves instances of E18 Physical Thing, may be further analysed into sub-components, thereby creating a hierarchy of part decomposition. An instance of E18 Physical Thing may be shared between multiple wholes, for example two buildings may share a common wall. This property does not specify when and for how long a component element resided in the respective whole. If a component is not part of a whole from the beginning of existence or until the end of existence of the whole, the classes E79 Part Addition and E90 Part Removal can be used to document when a component became part of a particular whole and/or when it stopped being a part of it. For the time-span of being part of the respective whole, the component is completely contained in the place the whole occupies.\nThis property is intended to describe specific components that are individually documented, rather than general aspects. Overall descriptions of the structure of an instance of E18 Physical Thing are captured by the P3 has note property.\nThe instances of E57 Material of which an instance of E18 Physical Thing is composed should be documented using P45 consists of (is incorporated in).\nThis property is transitive and asymmetric." + }, + "attributes" : [ "object", "external" ], + "id" : "288" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P86_falls_within", + "inverse" : "293", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "82", + "label" : { + "de" : "fällt in", + "IRI-based" : "P86_falls_within", + "ru" : "содержится в", + "pt" : "está contido em", + "el" : "περιέχεται σε", + "en" : "falls within", + "fr" : "s’insère dans", + "zh" : "属于" + }, + "domain" : "82", + "comment" : { + "en" : "This property describes the inclusion relationship between two instances of E52 Time-Span.\nThis property supports the notion that the temporal extent of an instance of E52 Time-Span falls within the temporal extent of another instance of E52 Time-Span. It addresses temporal containment only, and no contextual link between the two instances of E52 Time-Span is implied. This property is transitive and reflexive." + }, + "attributes" : [ "object", "external" ], + "id" : "292" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P28i_surrendered_custody_through", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "120", + "label" : { + "de" : "wurde Gewahrsam übergeben durch", + "IRI-based" : "P28i_surrendered_custody_through", + "ru" : "опека отдана через", + "pt" : "final da custódia por meio de", + "el" : "παρέδωσε κατοχή μέσω", + "en" : "surrendered custody through", + "fr" : "a cessé d’être détenteur à cause de", + "zh" : "出让监护权" + }, + "superproperty" : [ "149" ], + "domain" : "78", + "attributes" : [ "object", "external" ], + "id" : "121" + }, { + "range" : "6", + "domain" : "133", + "attributes" : [ "anonymous", "object" ], + "id" : "294" + }, { + "range" : "6", + "domain" : "220", + "attributes" : [ "anonymous", "object" ], + "id" : "295" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P30i_custody_transferred_through", + "inverse" : "297", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "120", + "label" : { + "de" : "wechselte Gewahrsam durch", + "IRI-based" : "P30i_custody_transferred_through", + "ru" : "опека передана через", + "pt" : "custódia transferida por meio de", + "el" : "άλλαξε κατοχή μέσω", + "en" : "custody transferred through", + "fr" : "a changé de détenteur du fait de", + "zh" : "变更监护权" + }, + "domain" : "11", + "attributes" : [ "object", "external" ], + "id" : "296" + }, { + "range" : "6", + "domain" : "31", + "attributes" : [ "anonymous", "object" ], + "id" : "298" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P10_falls_within", + "inverse" : "301", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "249", + "label" : { + "de" : "fällt in", + "IRI-based" : "P10_falls_within", + "ru" : "находится в пределах", + "pt" : "está contido em", + "el" : "εμπίπτει", + "en" : "falls within", + "fr" : "s’insère dans le cours de", + "zh" : "属于" + }, + "superproperty" : [ "302" ], + "domain" : "249", + "subproperty" : [ "303", "304" ], + "comment" : { + "en" : "This property associates an instance of E92 Spacetime Volume with another instance of E92 Spacetime Volume that falls within the latter. In other words, all points in the former are also points in the latter.\nThis property is transitive and reflexive." + }, + "attributes" : [ "object", "external" ], + "id" : "300" + }, { + "iri" : "http://w3id.org/vir#K26i_is_source_of", + "baseIri" : "http://w3id.org/vir", + "range" : "86", + "label" : { + "IRI-based" : "K26i_is_source_of", + "undefined" : "is source of" + }, + "domain" : "299", + "comment" : { + "undefined" : "This property associates an instance of IC16 Character with an instance of E39 Actor that the character is motivated by or is intended to represent" + }, + "attributes" : [ "object" ], + "id" : "305" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P173i_ends_after_or_with_the_start_of", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "116", + "label" : { + "IRI-based" : "P173i_ends_after_or_with_the_start_of", + "en" : "ends after or with the start of" + }, + "domain" : "116", + "subproperty" : [ "307" ], + "attributes" : [ "object", "external" ], + "id" : "306" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P70i_is_documented_in", + "inverse" : "309", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "220", + "label" : { + "de" : "wird belegt in", + "IRI-based" : "P70i_is_documented_in", + "ru" : "документирован в", + "pt" : "é documentado em", + "el" : "τεκμηριώνεται σε", + "en" : "is documented in", + "fr" : "est mentionnée dans", + "zh" : "记录在" + }, + "superproperty" : [ "93" ], + "domain" : "40", + "attributes" : [ "object", "external" ], + "id" : "308" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P135_created_type", + "inverse" : "212", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "108", + "label" : { + "de" : "erschuf Typus", + "IRI-based" : "P135_created_type", + "ru" : "создал тип", + "pt" : "criou tipo", + "el" : "δημιούργησε τύπο", + "en" : "created type", + "fr" : "a créé le type", + "zh" : "创建类型" + }, + "superproperty" : [ "211" ], + "domain" : "311", + "comment" : { + "en" : "This property identifies the instance of E55 Type, which is created in an instance of E83 Type Creation activity." + }, + "attributes" : [ "object", "external" ], + "id" : "310" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P7_took_place_at", + "inverse" : "250", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "100", + "label" : { + "de" : "fand statt in", + "IRI-based" : "P7_took_place_at", + "ru" : "совершался на", + "pt" : "ocorreu em", + "el" : "έλαβε χώρα σε", + "en" : "took place at", + "fr" : "a eu lieu dans", + "zh" : "发生地在" + }, + "superproperty" : [ "313" ], + "domain" : "231", + "comment" : { + "en" : "This property describes the spatial location of an instance of E4 Period.\nThe related instance of E53 Place should be seen as a wider approximation of the geometric area within which the phenomena that characterise the period in question occurred, see below. P7 took place at (witnessed) does not convey any meaning other than spatial positioning (frequently on the surface of the earth). For example, the period “Révolution française” can be said to have taken place in “France in 1789”; the “Victorian” period may be said to have taken place in “Britain from 1837-1901” and its colonies, as well as other parts of Europe and North America. An instance of E4 Period can take place at multiple non-contiguous, non-overlapping locations.\nThis property is a shortcut of the more fully developed path from E4 Period through P161 has spatial projection, E53 Place, P89 falls within to E53 Place. E4 Period is a subclass of E92 Spacetime Volume. By the definition of P161 has spatial projection an instance of E4 Period takes place on all its spatial projections, that is, instances of E53 Place. Something happening at a given place can also be considered to happen at a larger place containing the first. For example, the assault on the Bastille 14-th July 1789 took place in the area covered by Paris in 1789 but also in the area covered by France in 1789." + }, + "attributes" : [ "object", "external" ], + "id" : "312" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P176_starts_before_the_start_of", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "116", + "label" : { + "IRI-based" : "P176_starts_before_the_start_of", + "en" : "starts before the start of" + }, + "superproperty" : [ "315" ], + "domain" : "116", + "subproperty" : [ "137", "245" ], + "comment" : { + "en" : "This property specifies that the temporal extent of the domain instance A of E2 Temporal Entity starts definitely before the start of the temporal extent of the range instance B of E2 Temporal Entity.\nIn other words, if A = [A-start, A-end] and B = [B-start, B-end], we mean A-start < B-start is true.\nThis property is part of the set of temporal primitives P173 – P176, P182 – P185.\nThis property corresponds to a disjunction (logical OR) of the following Allen temporal relations (Allen, 1983): {before, meets, overlaps, contains, finished-by}. This property is transitive. This property is asymmetric.\n\nFigure 14: Temporal entity A starts before the start of temporal entity B. Here A is longer than B\n\nFigure 15: Temporal entity A starts before the start of temporal entity B. Here A is shorter than B" + }, + "attributes" : [ "object", "external" ], + "id" : "314" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P93i_was_taken_out_of_existence_by", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "71", + "label" : { + "de" : "wurde seiner Existenz beraubt durch", + "IRI-based" : "P93i_was_taken_out_of_existence_by", + "ru" : "прекратил существование посредством", + "pt" : "deixou de existir", + "el" : "αναιρέθηκε από", + "en" : "was taken out of existence by", + "fr" : "a cessé d’exister du fait de", + "zh" : "被结束存在" + }, + "superproperty" : [ "196" ], + "domain" : "278", + "subproperty" : [ "316", "21", "163", "317" ], + "attributes" : [ "object", "external" ], + "id" : "216" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P186i_is_produced_by", + "inverse" : "319", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "1", + "label" : { + "IRI-based" : "P186i_is_produced_by", + "en" : "is produced by" + }, + "domain" : "118", + "attributes" : [ "object", "external" ], + "id" : "318" + }, { + "domain" : "321", + "range" : "86", + "id" : "320", + "label" : { + "IRI-based" : "28", + "undefined" : "is a" + } + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P147i_was_curated_by", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "69", + "label" : { + "de" : "wurde kuratorisch betreut durch", + "IRI-based" : "P147i_was_curated_by", + "en" : "was curated by", + "zh" : "被管理" + }, + "domain" : "104", + "attributes" : [ "object", "external" ], + "id" : "322" + }, { + "domain" : "321", + "range" : "85", + "id" : "323", + "label" : { + "IRI-based" : "25", + "undefined" : "is a" + } + }, { + "domain" : "321", + "range" : "325", + "id" : "324", + "label" : { + "IRI-based" : "24", + "undefined" : "is a" + } + }, { + "domain" : "321", + "range" : "30", + "id" : "326", + "label" : { + "IRI-based" : "27", + "undefined" : "is a" + } + }, { + "domain" : "321", + "range" : "126", + "id" : "327", + "label" : { + "IRI-based" : "26", + "undefined" : "is a" + } + }, { + "domain" : "321", + "range" : "25", + "id" : "328", + "label" : { + "IRI-based" : "21", + "undefined" : "is a" + } + }, { + "domain" : "321", + "range" : "28", + "id" : "329", + "label" : { + "IRI-based" : "20", + "undefined" : "is a" + } + }, { + "domain" : "321", + "range" : "331", + "id" : "330", + "label" : { + "IRI-based" : "23", + "undefined" : "is a" + } + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P171_at_some_place_within", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "333", + "label" : { + "IRI-based" : "P171_at_some_place_within", + "en" : "at some place within" + }, + "domain" : "100", + "comment" : { + "en" : "This property describes the maximum spatial extent within which an instance of E53 Place falls. Since instances of E53 Places may not have precisely known spatial extents, the CIDOC CRM supports statements about maximum spatial extents of instances of E53 Place. This property allows an instance of E53 Place’s maximum spatial extent (i.e., its outer boundary) to be assigned an instance of E94 Space Primitive value.\nThis property is a shortcut of the fully developed path from E53 Place, P89 falls within, E53 Place, P168 place is defined by to E94 Space Primitive through a declarative Place that is not explicitly documented, to a Space Primitive: declarative places are defined in CRMgeo (Doerr and Hiebel 2013)." + }, + "attributes" : [ "datatype", "external" ], + "id" : "332" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P69_has_association_with", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "31", + "label" : { + "de" : "ist verbunden mit", + "IRI-based" : "P69_has_association_with", + "ru" : "ассоциирован с", + "pt" : "é associado com", + "el" : "σχετίζεται με", + "en" : "has association with", + "fr" : "est associée à", + "zh" : "关联" + }, + "domain" : "31", + "comment" : { + "en" : "This property generalises relationships like whole-part, sequence, prerequisite or inspired by between instances of E29 Design or Procedure. Any instance of E29 Design or Procedure may be associated with other designs or procedures. The property is considered to be symmetrical unless otherwise indicated by P69.1 has type. The property is not transitive\nThis property is a directed relationship. The P69.1 has type property of P69 has association with allows the nature of the association to be specified reading from domain to range; examples of types of association between instances of E29 Design or Procedure include: has part, follows, requires, etc.\nInstances of this property are considered to be symmetric, in case no directed sense is provided for them by the property P69.1 has type.\nThe property can typically be used to model the decomposition of the description of a complete workflow into a series of separate procedures." + }, + "attributes" : [ "object", "external" ], + "id" : "334" + }, { + "domain" : "321", + "range" : "67", + "id" : "335", + "label" : { + "IRI-based" : "22", + "undefined" : "is a" + } + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P109_has_current_or_former_curator", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "78", + "label" : { + "de" : "hat derzeitigen oder früheren Kurator", + "IRI-based" : "P109_has_current_or_former_curator", + "ru" : "имеет действующего или бывшего хранителя", + "pt" : "tem ou teve curador", + "el" : "έχει ή είχε επιμελητή", + "en" : "has current or former curator", + "fr" : "a pour conservateur actuel ou ancien", + "zh" : "有当前或以往管理者" + }, + "superproperty" : [ "166" ], + "domain" : "104", + "comment" : { + "en" : "This property identifies the instance of E39 Actor who assumed or have assumed overall curatorial responsibility for an instance of E78 Curated Holding.\nIt does not allow a history of curation to be recorded. This would require use of an event initiating a curator being responsible for a collection." + }, + "attributes" : [ "object", "external" ], + "id" : "205" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P180i_was_currency_of", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "207", + "label" : { + "IRI-based" : "P180i_was_currency_of", + "en" : "was currency of" + }, + "superproperty" : [ "34" ], + "domain" : "65", + "attributes" : [ "object", "external" ], + "id" : "38" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P145_separated", + "inverse" : "336", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "78", + "label" : { + "de" : "entließ", + "IRI-based" : "P145_separated", + "en" : "separated", + "zh" : "离开" + }, + "superproperty" : [ "22" ], + "domain" : "226", + "comment" : { + "en" : "This property identifies the instance of E39 Actor that leaves an instance of E74 Group through an instance of E86 Leaving." + }, + "attributes" : [ "object", "external" ], + "id" : "202" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P45_consists_of", + "inverse" : "338", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "97", + "label" : { + "de" : "besteht aus", + "IRI-based" : "P45_consists_of", + "ru" : "составлен из", + "pt" : "consiste de", + "el" : "αποτελείται από", + "en" : "consists of", + "fr" : "consiste en", + "zh" : "包含" + }, + "domain" : "11", + "comment" : { + "en" : "This property identifies the instances of E57 Materials of which an instance of E18 Physical Thing is composed.\nAll physical things consist of physical materials. P45 consists of (is incorporated in) allows the different materials to be recorded. P45 consists of (is incorporated in) refers here to observed material as opposed to the consumed raw material.\nA material, such as a theoretical alloy, may not have any physical instances." + }, + "attributes" : [ "object", "external" ], + "id" : "337" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P4_has_time-span", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "82", + "label" : { + "de" : "hat Zeitspanne", + "IRI-based" : "P4_has_time-span", + "ru" : "имеет временной отрезок", + "pt" : "tem período de tempo", + "el" : "βρισκόταν σε εξέλιξη", + "en" : "has time-span", + "fr" : "a pour durée", + "zh" : "发生时段是" + }, + "domain" : "116", + "comment" : { + "en" : "This property associates an instance of E2 Temporal Entity with the instance of E52 Time-Span during which it was on-going. The associated instance of E52 Time-Span is understood as the real time-span during which the phenomena making up the temporal entity instance were active. More than one instance of E2 Temporal Entity may share a common instance of E52 Time-Span only if they come into being and end being due to identical declarations or events." + }, + "attributes" : [ "object", "external" ], + "id" : "124" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P82b_end_of_the_end", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "340", + "label" : { + "de" : "Ende vom Ende", + "IRI-based" : "P82b_end_of_the_end", + "ru" : "конец конец", + "pt" : "fim do fim", + "el" : "τέλος του τέλους", + "en" : "end of the end", + "fr" : "fin de la fin" + }, + "domain" : "82", + "attributes" : [ "datatype", "external" ], + "id" : "339" + }, { + "domain" : "321", + "range" : "260", + "id" : "342", + "label" : { + "IRI-based" : "19", + "undefined" : "is a" + } + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P51i_is_former_or_current_owner_of", + "inverse" : "258", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "11", + "label" : { + "de" : "ist früherer oder derzeitiger Besitzer von", + "IRI-based" : "P51i_is_former_or_current_owner_of", + "ru" : "является бывшим или текущим владельцем для", + "pt" : "é ou foi proprietário de", + "el" : "είναι ή ήταν ιδιοκτήτης του/της", + "en" : "is former or current owner of", + "fr" : "est ou a été propriétaire de", + "zh" : "是以往或当前所有者" + }, + "domain" : "78", + "subproperty" : [ "243" ], + "attributes" : [ "object", "external" ], + "id" : "343" + }, { + "range" : "241", + "domain" : "86", + "attributes" : [ "anonymous", "object" ], + "id" : "349" + }, { + "range" : "11", + "domain" : "281", + "attributes" : [ "anonymous", "object" ], + "id" : "350" + }, { + "range" : "259", + "domain" : "260", + "attributes" : [ "anonymous", "object" ], + "id" : "351" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P92i_was_brought_into_existence_by", + "inverse" : "113", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "2", + "label" : { + "de" : "wurde in Existenz gebracht durch", + "IRI-based" : "P92i_was_brought_into_existence_by", + "ru" : "был создан посредством", + "pt" : "passou a existir por", + "el" : "γεννήθηκε από", + "en" : "was brought into existence by", + "fr" : "a commencé à exister du fait de", + "zh" : "使导致存在" + }, + "superproperty" : [ "196" ], + "domain" : "278", + "subproperty" : [ "192", "352", "210", "112", "353" ], + "attributes" : [ "object", "external" ], + "id" : "194" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P186_produced_thing_of_product_type", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "118", + "label" : { + "IRI-based" : "P186_produced_thing_of_product_type", + "en" : "produced thing of product type" + }, + "domain" : "1", + "comment" : { + "en" : "This property associates an instance of E12 Production with the instance of E99 Production Type, that is, the type of the things it produces." + }, + "attributes" : [ "object", "external" ], + "id" : "319" + }, { + "iri" : "http://w3id.org/vir#K7i_has_recto", + "baseIri" : "http://w3id.org/vir", + "range" : "331", + "label" : { + "IRI-based" : "K7i_has_recto", + "undefined" : "has recto" + }, + "superproperty" : [ "356" ], + "domain" : "355", + "comment" : { + "undefined" : "The property indicates the presence of a recto in the described object" + }, + "attributes" : [ "object" ], + "id" : "354" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P179_had_sales_price", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "207", + "label" : { + "IRI-based" : "P179_had_sales_price", + "en" : "had sales price" + }, + "domain" : "208", + "comment" : { + "en" : "This property establishes the relationship between an instance of E96 Purchase and the instance of E97 Monetary Amount that forms the compensation for the transaction. The monetary amount agreed upon may change in the course of the purchase activity." + }, + "attributes" : [ "object", "external" ], + "id" : "209" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P104_is_subject_to", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "5", + "label" : { + "de" : "Gegenstand von", + "IRI-based" : "P104_is_subject_to", + "ru" : "является объектом для", + "pt" : "está sujeito à", + "el" : "υπόκειται σε", + "en" : "is subject to", + "fr" : "est sujet à", + "zh" : "服从" + }, + "domain" : "88", + "comment" : { + "en" : "This property links a particular instance of E72 Legal Object to the instances of E30 Right to which it is subject.\nThe Right is held by an E39 Actor as described by P75 possesses (is possessed by)." + }, + "attributes" : [ "object", "external" ], + "id" : "357" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P21i_was_purpose_of", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "45", + "label" : { + "de" : "war Zweck von", + "IRI-based" : "P21i_was_purpose_of", + "ru" : "был целью для", + "pt" : "era o propósito de", + "el" : "ήταν σκοπός του/της", + "en" : "was purpose of", + "fr" : "était le but de", + "zh" : "是为了" + }, + "domain" : "108", + "attributes" : [ "object", "external" ], + "id" : "287" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P39_measured", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "11", + "label" : { + "de" : "vermaß", + "IRI-based" : "P39_measured", + "ru" : "измерил", + "pt" : "mediu", + "el" : "μέτρησε", + "en" : "measured", + "fr" : "a mesuré", + "zh" : "测量了" + }, + "superproperty" : [ "359" ], + "domain" : "273", + "comment" : { + "en" : "This property associates an instance of E16 Measurement with the instance of E18 Physical Thing upon which it acted. The instance of E16 Measurement is specific to the measured object. An instance of E18 Physical Thing may be measured more than once with different results, constituting different instances of E16 Measurement." + }, + "attributes" : [ "object", "external" ], + "id" : "358" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P82_at_some_time_within", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "346", + "label" : { + "de" : "irgendwann innerhalb von", + "IRI-based" : "P82_at_some_time_within", + "ru" : "некоторое время в течение", + "pt" : "abrange no máximo", + "el" : "κάποτε εντός", + "en" : "at some time within", + "fr" : "couvre au plus", + "zh" : "最长范围是" + }, + "domain" : "82", + "comment" : { + "en" : "This property describes the maximum period of time within which an E52 Time-Span falls. Since Time-Spans may not have precisely known temporal extents, the CIDOC CRM supports statements about the minimum and maximum temporal extents of Time-Spans. This property allows a Time-Span’s maximum temporal extent (i.e., its outer boundary) to be assigned an E61 Time Primitive value. Time Primitives are treated by the CIDOC CRM as application or system specific date intervals, and are not further analysed. If different sources of evidence justify different maximum extents without contradicting each other, the resulting intersection of all these extents will be the best estimate. This should be taken into account for information integration." + }, + "attributes" : [ "datatype", "external" ], + "id" : "360" + }, { + "range" : "134", + "domain" : "135", + "attributes" : [ "anonymous", "object" ], + "id" : "361" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P125i_was_type_of_object_used_in", + "inverse" : "240", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "45", + "label" : { + "de" : "Objekt des Typus ... wurde benutzt in", + "IRI-based" : "P125i_was_type_of_object_used_in", + "ru" : "был типом объекта использованного в", + "pt" : "foi tipo do objeto usado em", + "el" : "ήταν o τύπος αντικείμενου που χρησιμοποιήθηκε σε", + "en" : "was type of object used in", + "fr" : "était le type d’objet employé par", + "zh" : "是使用的对象类型" + }, + "domain" : "108", + "subproperty" : [ "184" ], + "attributes" : [ "object", "external" ], + "id" : "186" + }, { + "range" : "133", + "domain" : "30", + "attributes" : [ "anonymous", "object" ], + "id" : "362" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P99i_was_dissolved_by", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "19", + "label" : { + "de" : "wurde aufgelöst durch", + "IRI-based" : "P99i_was_dissolved_by", + "ru" : "был распущен посредством", + "pt" : "foi dissolvido por", + "el" : "διαλύθηκε από", + "en" : "was dissolved by", + "fr" : "a été dissous par", + "zh" : "被解散" + }, + "superproperty" : [ "216", "199" ], + "domain" : "20", + "attributes" : [ "object", "external" ], + "id" : "21" + }, { + "range" : "135", + "domain" : "111", + "attributes" : [ "anonymous", "object" ], + "id" : "363" + }, { + "range" : "134", + "domain" : "106", + "attributes" : [ "anonymous", "object" ], + "id" : "364" + }, { + "range" : "4", + "domain" : "108", + "attributes" : [ "anonymous", "object" ], + "id" : "365" + }, { + "range" : "4", + "domain" : "3", + "attributes" : [ "anonymous", "object" ], + "id" : "366" + }, { + "range" : "133", + "domain" : "58", + "attributes" : [ "anonymous", "object" ], + "id" : "367" + }, { + "range" : "133", + "domain" : "126", + "attributes" : [ "anonymous", "object" ], + "id" : "368" + }, { + "iri" : "http://w3id.org/vir#K4i_has_visual_prototype", + "baseIri" : "http://w3id.org/vir", + "range" : "126", + "label" : { + "IRI-based" : "K4i_has_visual_prototype", + "undefined" : "has visual prototype" + }, + "superproperty" : [ "93" ], + "domain" : "126", + "comment" : { + "undefined" : "The property documents the use of a specific prototypical example for an image. The nature of the relationships helps define a map of relationships between prototypical items used in the arts." + }, + "attributes" : [ "object" ], + "id" : "369" + }, { + "range" : "4", + "domain" : "132", + "attributes" : [ "anonymous", "object" ], + "id" : "370" + }, { + "range" : "108", + "domain" : "118", + "attributes" : [ "anonymous", "object" ], + "id" : "371" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P19_was_intended_use_of", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "44", + "label" : { + "de" : "war beabsichtigteter Gebrauch von", + "IRI-based" : "P19_was_intended_use_of", + "ru" : "был предполагаемым использованием для", + "pt" : "era prevista a utilização de", + "el" : "ήταν προορισμένη χρήση του", + "en" : "was intended use of", + "fr" : "était l'utilisation prévue de", + "zh" : "特定用途是" + }, + "domain" : "45", + "comment" : { + "en" : "This property relates an instance of E7 Activity with instances of E71 Human-Made Thing, created specifically for use in the activity.\nThis is distinct from the intended use of an item in some general type of activity such as the book of common prayer which was intended for use in Church of England services (see P101 had as general use (was use of))." + }, + "attributes" : [ "object", "external" ], + "id" : "46" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P143i_was_joined_by", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "77", + "label" : { + "de" : "wurde verbunden durch", + "IRI-based" : "P143i_was_joined_by", + "en" : "was joined by", + "zh" : "被加入" + }, + "superproperty" : [ "199" ], + "domain" : "78", + "attributes" : [ "object", "external" ], + "id" : "79" + }, { + "iri" : "http://w3id.org/vir#K1_denotes", + "baseIri" : "http://w3id.org/vir", + "range" : "133", + "label" : { + "IRI-based" : "K1_denotes", + "undefined" : "Denote" + }, + "superproperty" : [ "373" ], + "domain" : "11", + "comment" : { + "undefined" : "The property documents the assignment of an iconographical object to a specific physical man-made object. It is a shortcut for the more fully developed path IC12 Visual Recognition assign (K9) to a E18 Physical Thing the status of (K11) IC9 Representation" + }, + "attributes" : [ "object" ], + "id" : "372" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P138i_has_representation", + "inverse" : "374", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "133", + "label" : { + "de" : "wird dargestellt durch", + "IRI-based" : "P138i_has_representation", + "ru" : "имеет представление", + "pt" : "tem representação", + "el" : "παριστάνεται από", + "en" : "has representation", + "fr" : "est représentée par", + "zh" : "有描绘" + }, + "superproperty" : [ "93" ], + "domain" : "40", + "subproperty" : [ "375", "376", "125", "213", "377", "378" ], + "attributes" : [ "object", "external" ], + "id" : "127" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P100_was_death_of", + "inverse" : "316", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "111", + "label" : { + "de" : "Tod von", + "IRI-based" : "P100_was_death_of", + "ru" : "был смертью для", + "pt" : "foi a morte para", + "el" : "ήταν θάνατος του/της", + "en" : "was death of", + "fr" : "a été la mort de", + "zh" : "死亡的是" + }, + "superproperty" : [ "23" ], + "domain" : "75", + "comment" : { + "en" : "This property links an instance of E69 Death to the instance of E21 Person that died.\nAn instance of E69 Death may involve multiple people, for example in the case of a battle or disaster.\nThis is not intended for use with general natural history material, only people." + }, + "attributes" : [ "object", "external" ], + "id" : "379" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P102i_is_title_of", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "44", + "label" : { + "de" : "ist der Titel von", + "IRI-based" : "P102i_is_title_of", + "ru" : "является заголовком для", + "pt" : "é título de", + "el" : "είναι τίτλος του/της", + "en" : "is title of", + "fr" : "est le titre de", + "zh" : "题名是" + }, + "superproperty" : [ "381" ], + "domain" : "265", + "attributes" : [ "object", "external" ], + "id" : "380" + }, { + "iri" : "http://w3id.org/vir#K23i_is_connotation_of", + "baseIri" : "http://w3id.org/vir", + "range" : "126", + "label" : { + "IRI-based" : "K23i_is_connotation_of", + "undefined" : "is connoted by" + }, + "superproperty" : [ "127" ], + "domain" : "126", + "comment" : { + "undefined" : "This property indicates the connotation relationships, formalised by Barthes, between a conceptual entity and an iconographical object. It is a shortcut for the more fully developed path IC12 Visual Recognition assign (K9) to a IC9 Representation a new (K11) IC9 Representation. It doesn’t offer any information about when and whom established the connotation relationship" + }, + "attributes" : [ "object" ], + "id" : "378" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P43i_is_dimension_of", + "inverse" : "383", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "89", + "label" : { + "de" : "ist Dimension von", + "IRI-based" : "P43i_is_dimension_of", + "ru" : "является величиной для", + "pt" : "é dimensão de", + "el" : "είναι μέγεθος του", + "en" : "is dimension of", + "fr" : "est dimension de", + "zh" : "是度量规格" + }, + "domain" : "36", + "attributes" : [ "object", "external" ], + "id" : "382" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P95i_was_formed_by", + "inverse" : "384", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "63", + "label" : { + "de" : "wurde gebildet von", + "IRI-based" : "P95i_was_formed_by", + "ru" : "была сформирована посредством", + "pt" : "foi formado por", + "el" : "σχηματίστηκε από", + "en" : "was formed by", + "fr" : "a été fondé par", + "zh" : "被组成" + }, + "superproperty" : [ "194" ], + "domain" : "20", + "attributes" : [ "object", "external" ], + "id" : "352" + }, { + "range" : "108", + "domain" : "97", + "attributes" : [ "anonymous", "object" ], + "id" : "385" + }, { + "range" : "41", + "domain" : "106", + "attributes" : [ "anonymous", "object" ], + "id" : "386" + }, { + "range" : "41", + "domain" : "105", + "attributes" : [ "anonymous", "object" ], + "id" : "387" + }, { + "range" : "108", + "domain" : "117", + "attributes" : [ "anonymous", "object" ], + "id" : "388" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P175i_starts_after_or_with_the_start_of", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "116", + "label" : { + "IRI-based" : "P175i_starts_after_or_with_the_start_of", + "en" : "starts after or with the start of" + }, + "superproperty" : [ "307" ], + "domain" : "116", + "subproperty" : [ "48" ], + "attributes" : [ "object", "external" ], + "id" : "389" + }, { + "range" : "108", + "domain" : "35", + "attributes" : [ "anonymous", "object" ], + "id" : "390" + }, { + "range" : "3", + "domain" : "5", + "attributes" : [ "anonymous", "object" ], + "id" : "391" + }, { + "range" : "41", + "domain" : "104", + "attributes" : [ "anonymous", "object" ], + "id" : "393" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P197i_was_partially_covered_by", + "inverse" : "395", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "173", + "label" : { + "IRI-based" : "P197i_was_partially_covered_by", + "en" : "was partially covered by" + }, + "domain" : "100", + "attributes" : [ "object", "external" ], + "id" : "394" + }, { + "range" : "3", + "domain" : "6", + "attributes" : [ "anonymous", "object" ], + "id" : "396" + }, { + "range" : "44", + "domain" : "41", + "attributes" : [ "anonymous", "object" ], + "id" : "397" + }, { + "range" : "44", + "domain" : "4", + "attributes" : [ "anonymous", "object" ], + "id" : "398" + }, { + "range" : "198", + "domain" : "45", + "attributes" : [ "anonymous", "object" ], + "id" : "399" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P41_classified", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "40", + "label" : { + "de" : "klassifizierte", + "IRI-based" : "P41_classified", + "ru" : "классифицировал", + "pt" : "classificou", + "el" : "χαρακτήρισε", + "en" : "classified", + "fr" : "a classifié", + "zh" : "分类" + }, + "superproperty" : [ "359" ], + "domain" : "401", + "comment" : { + "en" : "This property records the item to which a type was assigned in an E17 Type Assignment activity.\nAny instance of a CIDOC CRM entity may be assigned a type through type assignment. Type assignment events allow a more detailed path from E1 CRM Entity through P41i was classified by, E17 Type Assignment, P42 assigned, to E55 Type for assigning types to objects compared to the shortcut offered by P2 has type (is type of)." + }, + "attributes" : [ "object", "external" ], + "id" : "400" + }, { + "range" : "198", + "domain" : "71", + "attributes" : [ "anonymous", "object" ], + "id" : "402" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P81b_begin_of_the_end", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "347", + "label" : { + "de" : "Anfang vom Ende", + "IRI-based" : "P81b_begin_of_the_end", + "ru" : "начать в конце", + "pt" : "começar do fim", + "el" : "αρχή του τέλους", + "en" : "begin of the end", + "fr" : "début de la fin" + }, + "domain" : "82", + "attributes" : [ "datatype", "external" ], + "id" : "403" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P190_has_symbolic_content", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "405", + "label" : { + "IRI-based" : "P190_has_symbolic_content", + "en" : "has symbolic content" + }, + "domain" : "132", + "comment" : { + "en" : "This property associates an instance of E90 Symbolic Object with a complete, identifying representation of its content in the form of an instance of E62 String.\nThis property only applies to instances of E90 Symbolic Object that can be represented completely in this form. The representation may be more specific than the symbolic level defining the identity condition of the represented. This depends on the type of the symbolic object represented. For instance, if a name has type \"Modern Greek character sequence\", it may be represented in a loss-free Latin transcription, meaning however the sequence of Greek letters.\nAs another example, if the represented object has type \"English words sequence\", American English or British English spelling variants may be chosen to represent the English word \"colour\" without defining a different symbolic object. If a name has type \"European traditional name\", no particular string may define its content." + }, + "attributes" : [ "datatype", "external" ], + "id" : "404" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P5i_forms_part_of", + "inverse" : "407", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "115", + "label" : { + "de" : "bildet Teil von", + "IRI-based" : "P5i_forms_part_of", + "ru" : "формирует часть", + "pt" : "faz parte de", + "el" : "αποτελεί μέρος του/της", + "en" : "forms part of", + "fr" : "fait partie de", + "zh" : "组成部分" + }, + "domain" : "115", + "attributes" : [ "object", "external" ], + "id" : "406" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P37_assigned", + "inverse" : "408", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "157", + "label" : { + "de" : "wies zu", + "IRI-based" : "P37_assigned", + "ru" : "назначил", + "pt" : "atribuiu", + "el" : "απέδωσε", + "en" : "assigned", + "fr" : "a attribué", + "zh" : "分配了" + }, + "superproperty" : [ "158" ], + "domain" : "156", + "comment" : { + "en" : "This property records the identifier that was assigned to an item in an instance of P37 Identifier Assignment.\nThe same identifier may be assigned on more than one occasion.\nAn Identifier might be created prior to an assignment." + }, + "attributes" : [ "object", "external" ], + "id" : "237" + }, { + "range" : "8", + "domain" : "311", + "attributes" : [ "anonymous", "object" ], + "id" : "409" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P65i_is_shown_by", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "41", + "label" : { + "de" : "wird gezeigt durch", + "IRI-based" : "P65i_is_shown_by", + "ru" : "показан посредством", + "pt" : "é apresentado por", + "el" : "εμφανίζεται σε", + "en" : "is shown by", + "fr" : "est présenté par", + "zh" : "被展示" + }, + "superproperty" : [ "411" ], + "domain" : "133", + "subproperty" : [ "412" ], + "attributes" : [ "object", "external" ], + "id" : "410" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P184i_ends_with_or_after_the_end_of", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "116", + "label" : { + "IRI-based" : "P184i_ends_with_or_after_the_end_of", + "en" : "ends with or after the end of" + }, + "superproperty" : [ "307" ], + "domain" : "116", + "subproperty" : [ "246" ], + "attributes" : [ "object", "external" ], + "id" : "141" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P37i_was_assigned_by", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "156", + "label" : { + "de" : "wurde zugewiesen durch", + "IRI-based" : "P37i_was_assigned_by", + "ru" : "был присвоен посредством", + "pt" : "foi atribuído por", + "el" : "αποδόθηκε ως ιδιότητα από", + "en" : "was assigned by", + "fr" : "a été attribuée par", + "zh" : "被分配" + }, + "superproperty" : [ "234" ], + "domain" : "157", + "attributes" : [ "object", "external" ], + "id" : "408" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P152_has_parent", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "111", + "label" : { + "IRI-based" : "P152_has_parent", + "en" : "has parent" + }, + "domain" : "111", + "comment" : { + "en" : "This property associates an instance of E21 Person with another instance of E21 Person who plays the role of the first instance’s parent, regardless of whether the relationship is biological parenthood, assumed or pretended biological parenthood or an equivalent legal status of rights and obligations obtained by a social or legal act.\nThis property is, among others, a shortcut of the fully developed paths from E21 Person through P98i was born, E67 Birth, P96 by mother to E21 Person, and from E21 Person through P98i was born, E67 Birth, P97 from father to E21 Person.\nThis property is not transitive. This property is irreflexive." + }, + "attributes" : [ "object", "external" ], + "id" : "255" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P12i_was_present_at", + "inverse" : "187", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "198", + "label" : { + "de" : "war anwesend bei", + "IRI-based" : "P12i_was_present_at", + "ru" : "присутствовал при", + "pt" : "estava presente no", + "el" : "ήταν παρών/παρούσα/παρόν σε", + "en" : "was present at", + "fr" : "était présent à", + "zh" : "出现在" + }, + "domain" : "278", + "subproperty" : [ "216", "194", "130", "413", "195", "414", "199" ], + "attributes" : [ "object", "external" ], + "id" : "196" + }, { + "iri" : "http://w3id.org/vir#K17i_is_attribute_of", + "baseIri" : "http://w3id.org/vir", + "range" : "126", + "label" : { + "IRI-based" : "K17i_is_attribute_of", + "undefined" : "is attribute of" + }, + "superproperty" : [ "416" ], + "domain" : "30", + "comment" : { + "undefined" : "This property associates an attribute with the iconographical object where it is depicted" + }, + "attributes" : [ "object" ], + "id" : "415" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P101_had_as_general_use", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "108", + "label" : { + "de" : "hatte die allgemeine Verwendung", + "IRI-based" : "P101_had_as_general_use", + "ru" : "имел основное применение", + "pt" : "tem como uso geral", + "el" : "είχε ως γενική χρήση", + "en" : "had as general use", + "fr" : "avait comme utilisation générale", + "zh" : "有一般用途" + }, + "domain" : "89", + "comment" : { + "en" : "This property associates an instance of E70 Thing with an instance of E55 Type that describes the type of use that it was actually employed for.\nIt allows the relationship between particular things, both physical and immaterial, and the general methods and techniques of real use to be documented. This may well be different from the intended functional purpose of the instance of E70 Thing (which can be documented with P103 was intended for (was intention of)). For example, it could be recorded that a particular wooden crate had a general use as a shelf support on a market stall even though it had been originally intended for carrying vegetables.\nThe use of this property is intended to allow the documentation of usage patterns attested in historical records or through scientific investigation (for instance ceramic residue analysis). It should not be used to document the intended, and thus assumed, use of an object." + }, + "attributes" : [ "object", "external" ], + "id" : "417" + }, { + "iri" : "http://w3id.org/vir#K8i_has_verso", + "baseIri" : "http://w3id.org/vir", + "range" : "325", + "label" : { + "IRI-based" : "K8i_has_verso", + "undefined" : "has verso" + }, + "superproperty" : [ "356" ], + "domain" : "355", + "comment" : { + "undefined" : "The property indicates the presence of a verso in the described object" + }, + "attributes" : [ "object" ], + "id" : "418" + }, { + "range" : "132", + "domain" : "6", + "attributes" : [ "anonymous", "object" ], + "id" : "419" + }, { + "range" : "132", + "domain" : "183", + "attributes" : [ "anonymous", "object" ], + "id" : "420" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P112i_was_diminished_by", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "10", + "label" : { + "de" : "wurde vermindert durch", + "IRI-based" : "P112i_was_diminished_by", + "ru" : "был уменьшен посредством", + "pt" : "foi diminuído por", + "el" : "εξαλείφθηκε από", + "en" : "was diminished by", + "fr" : "a été diminué par", + "zh" : "被减少" + }, + "superproperty" : [ "195" ], + "domain" : "11", + "attributes" : [ "object", "external" ], + "id" : "12" + }, { + "range" : "233", + "domain" : "401", + "attributes" : [ "anonymous", "object" ], + "id" : "421" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P53_has_former_or_current_location", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "100", + "label" : { + "de" : "hat früheren oder derzeitigen Standort", + "IRI-based" : "P53_has_former_or_current_location", + "ru" : "имеет текущее или бывшее местоположение", + "pt" : "é ou foi localizada em", + "el" : "βρίσκεται ή βρισκόταν σε", + "en" : "has former or current location", + "fr" : "a ou a eu pour localisation", + "zh" : "有之前或当前位置" + }, + "domain" : "11", + "subproperty" : [ "422", "169" ], + "comment" : { + "en" : "This property identifies an instance of E53 Place as the former or current location of an instance of E18 Physical Thing.\nIn the case of instances of E19 Physical Object, the property does not allow any indication of the Time-Span during which the instance of E19 Physical Object was located at this instance of E53 Place, nor if this is the current location.\nIn the case of immobile objects, the Place would normally correspond to the Place of creation.\nThis property is a shortcut. A more detailed representation can make use of the fully developed (i.e., indirect) path from E19 Physical Object, though, P25i moved by, E9 Move, P26 moved to or P27 moved from to E53 Place." + }, + "attributes" : [ "object", "external" ], + "id" : "171" + }, { + "range" : "233", + "domain" : "156", + "attributes" : [ "anonymous", "object" ], + "id" : "423" + }, { + "range" : "249", + "domain" : "231", + "attributes" : [ "anonymous", "object" ], + "id" : "424" + }, { + "range" : "249", + "domain" : "173", + "attributes" : [ "anonymous", "object" ], + "id" : "425" + }, { + "range" : "40", + "domain" : "36", + "attributes" : [ "anonymous", "object" ], + "id" : "426" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P82a_begin_of_the_begin", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "341", + "label" : { + "de" : "Anfang des Anfangs", + "IRI-based" : "P82a_begin_of_the_begin", + "ru" : "начать с начала", + "pt" : "começar do início", + "el" : "αρχή της αρχής", + "en" : "begin of the begin", + "fr" : "début du début" + }, + "domain" : "82", + "attributes" : [ "datatype", "external" ], + "id" : "427" + }, { + "range" : "40", + "domain" : "82", + "attributes" : [ "anonymous", "object" ], + "id" : "428" + }, { + "range" : "233", + "domain" : "251", + "attributes" : [ "anonymous", "object" ], + "id" : "429" + }, { + "range" : "233", + "domain" : "273", + "attributes" : [ "anonymous", "object" ], + "id" : "430" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P70_documents", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "40", + "label" : { + "de" : "belegt", + "IRI-based" : "P70_documents", + "ru" : "документирует", + "pt" : "documenta", + "el" : "τεκμηριώνει", + "en" : "documents", + "fr" : "mentionne", + "zh" : "记录了" + }, + "superproperty" : [ "431" ], + "domain" : "220", + "comment" : { + "en" : "This property describes the CRM Entities documented as instances of E31 Document.\nDocuments may describe any conceivable entity, hence the link to the highest-level entity in the CIDOC CRM class hierarchy. This property is intended for cases where a reference is regarded as making a proposition about reality. This may be of a documentary character, in the scholarly or scientific sense, or a more general statement." + }, + "attributes" : [ "object", "external" ], + "id" : "309" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P157i_provides_reference_space_for", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "100", + "label" : { + "IRI-based" : "P157i_provides_reference_space_for", + "en" : "provides reference space for" + }, + "domain" : "11", + "subproperty" : [ "422", "261" ], + "attributes" : [ "object", "external" ], + "id" : "189" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P138_represents", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "40", + "label" : { + "de" : "stellt dar", + "IRI-based" : "P138_represents", + "ru" : "представляет", + "pt" : "representa", + "el" : "παριστάνει", + "en" : "represents", + "fr" : "représente", + "zh" : "描绘" + }, + "superproperty" : [ "431" ], + "domain" : "133", + "subproperty" : [ "432", "433", "434", "435", "436", "437" ], + "comment" : { + "en" : "This property establishes the relationship between an instance of E36 Visual Item and the instance of E1 CRM Entity that it visually represents.\nAny entity may be represented visually. This property is part of the fully developed path from E24 Physical Human-Made Thing through P65 shows visual item (is shown by), E36 Visual Item, P138 represents (has representation) to E1 CRM Entity, which is shortcut by P62 depicts (is depicted by). P138.1 mode of representation allows the nature of the representation to be refined.\nThis property is also used for the relationship between an original and a digitisation of the original by the use of techniques such as digital photography, flatbed or infrared scanning. Digitisation is here seen as a process with a mechanical, causal component rendering the spatial distribution of structural and optical properties of the original and does not necessarily include any visual similarity identifiable by human observation." + }, + "attributes" : [ "object", "external" ], + "id" : "374" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P89i_contains", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "100", + "label" : { + "de" : "enthält", + "IRI-based" : "P89i_contains", + "ru" : "содержит", + "pt" : "contém", + "el" : "περιέχει", + "en" : "contains", + "fr" : "inclut", + "zh" : "包括" + }, + "domain" : "100", + "attributes" : [ "object", "external" ], + "id" : "176" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P2_has_type", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "108", + "label" : { + "de" : "hat den Typus", + "IRI-based" : "P2_has_type", + "ru" : "имеет тип", + "pt" : "é do tipo", + "el" : "έχει τύπο", + "en" : "has type", + "fr" : "est de type", + "zh" : "有类型" + }, + "domain" : "40", + "subproperty" : [ "439", "109" ], + "comment" : { + "en" : "This property allows sub typing of CIDOC CRM entities –a form of specialisation – through the use of a terminological hierarchy, or thesaurus.\nThe CIDOC CRM is intended to focus on the high-level entities and relationships needed to describe data structures. Consequently, it does not specialise entities any further than is required for this immediate purpose. However, entities in the isA hierarchy of the CIDOC CRM may by specialised into any number of sub entities, which can be defined in the E55 Type hierarchy. E41 Appellation, for example, may be specialised into “e-mail address”, “telephone number”, “post office box”, “URL” etc. none of which figures explicitly in the CIDOC CRM hierarchy. A comprehensive explanation about refining CIDOC CRM concepts by E55 Type is given in the section “About Types” in the section on “Specific Modelling Constructs” of this document.\nThis property is a shortcut for the path from E1 CRM Entity through P41i was classified by, E17 Type Assignment, P42 assigned to E55 Type." + }, + "attributes" : [ "object", "external" ], + "id" : "438" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P76_has_contact_point", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "183", + "label" : { + "de" : "hat Kontaktpunkt", + "IRI-based" : "P76_has_contact_point", + "ru" : "имеет контакт", + "pt" : "possui ponto de contato", + "el" : "έχει σημείο επικοινωνίας", + "en" : "has contact point", + "fr" : "a pour coordonnées individuelles", + "zh" : "有联系方式" + }, + "domain" : "78", + "comment" : { + "en" : "This property associates an instance of E39 Actor to an instance of E41 Appellation which a communication service uses to direct communications to this actor, such as an e-mail address, fax number, or postal address." + }, + "attributes" : [ "object", "external" ], + "id" : "440" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P46i_forms_part_of", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "11", + "label" : { + "de" : "bildet Teil von", + "IRI-based" : "P46i_forms_part_of", + "ru" : "формирует часть", + "pt" : "faz parte de", + "el" : "αποτελεί μέρος του/της", + "en" : "forms part of", + "fr" : "fait partie de", + "zh" : "构成部分" + }, + "domain" : "11", + "subproperty" : [ "356", "441" ], + "attributes" : [ "object", "external" ], + "id" : "289" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P123_resulted_in", + "inverse" : "353", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "11", + "label" : { + "de" : "ergab", + "IRI-based" : "P123_resulted_in", + "ru" : "повлек появление", + "pt" : "resultou em", + "el" : "είχε ως αποτέλεσμα", + "en" : "resulted in", + "fr" : "a eu pour résultat", + "zh" : "结果造成" + }, + "superproperty" : [ "113" ], + "domain" : "17", + "comment" : { + "en" : "This property identifies the instance or instances of E18 Physical Thing that are the result of an instance of E81 Transformation. New items replace the transformed item or items, which cease to exist as units of documentation. The physical continuity between the old and the new is expressed by the links to the common instance of E81 Transformation." + }, + "attributes" : [ "object", "external" ], + "id" : "442" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P26_moved_to", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "100", + "label" : { + "de" : "bewegte bis zu", + "IRI-based" : "P26_moved_to", + "ru" : "перемещен в", + "pt" : "locomoveu para", + "el" : "μετακινήθηκε προς", + "en" : "moved to", + "fr" : "a déplacé vers", + "zh" : "移至" + }, + "domain" : "160", + "comment" : { + "en" : "This property identifies a destination, an instance of E53 place, of an instance of E9 Move.\nA move will be linked to a destination, such as the move of an artifact from storage to display. A move may be linked to many terminal instances of E53 Place by multiple instances of this property. In this case the move describes a distribution of a set of objects. The area of the move includes the origin(s), route and destination(s).\nTherefore, the described destination is an instance of E53 Place which P89 falls within (contains) the instance of E53 Place the move P7 took place at." + }, + "attributes" : [ "object", "external" ], + "id" : "443" + }, { + "range" : "40", + "domain" : "116", + "attributes" : [ "anonymous", "object" ], + "id" : "444" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P31_has_modified", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "11", + "label" : { + "de" : "veränderte", + "IRI-based" : "P31_has_modified", + "ru" : "изменил", + "pt" : "modificou", + "el" : "τροποποίησε", + "en" : "has modified", + "fr" : "a modifié", + "zh" : "已更改" + }, + "superproperty" : [ "187" ], + "domain" : "267", + "subproperty" : [ "193", "9", "283" ], + "comment" : { + "en" : "This property identifies the instance of E18 Physical Thing modified in an instance of E11 Modification." + }, + "attributes" : [ "object", "external" ], + "id" : "13" + }, { + "range" : "40", + "domain" : "100", + "attributes" : [ "anonymous", "object" ], + "id" : "445" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P195i_had_presence", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "173", + "label" : { + "IRI-based" : "P195i_had_presence", + "en" : "had presence" + }, + "domain" : "11", + "attributes" : [ "object", "external" ], + "id" : "446" + }, { + "range" : "40", + "domain" : "278", + "attributes" : [ "anonymous", "object" ], + "id" : "447" + }, { + "range" : "11", + "domain" : "41", + "attributes" : [ "anonymous", "object" ], + "id" : "448" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P183i_starts_after_the_end_of", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "116", + "label" : { + "IRI-based" : "P183i_starts_after_the_end_of", + "en" : "starts after the end of" + }, + "superproperty" : [ "244" ], + "domain" : "116", + "attributes" : [ "object", "external" ], + "id" : "247" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P167i_includes", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "173", + "label" : { + "IRI-based" : "P167i_includes", + "en" : "includes" + }, + "domain" : "100", + "attributes" : [ "object", "external" ], + "id" : "174" + }, { + "range" : "11", + "domain" : "134", + "attributes" : [ "anonymous", "object" ], + "id" : "449" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P132_spatiotemporally_overlaps_with", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "249", + "label" : { + "IRI-based" : "P132_spatiotemporally_overlaps_with", + "en" : "spatiotemporally overlaps with" + }, + "domain" : "249", + "subproperty" : [ "300", "301" ], + "comment" : { + "en" : "This symmetric property associates two instances of E92 Spacetime Volume that have some of their extents in common. If only the fuzzy boundaries of the instances of E92 Spacetime Volume overlap, this property cannot be determined from observation alone and therefore should not be applied. However, there may be other forms of justification that the two instances of E92 Spacetime Volume must have some of their extents in common regardless of where and when precisely.\nIf this property holds for two instances of E92 Spacetime Volume then it cannot be the case that P133 is spatiotemporally separated from also holds for the same two instances. Furthermore, there are cases where neither P132 spatiotemporally overlaps with nor P133 is spatiotemporally separated from holds between two instances of E92 Spacetime Volume. This would occur where only an overlap of the fuzzy boundaries of the two instances of E92 Spacetime Volume occurs and no other evidence is available.\nThis property is not transitive. This property is symmetric. This property is reflexive." + }, + "attributes" : [ "object", "external" ], + "id" : "302" + }, { + "range" : "40", + "domain" : "249", + "attributes" : [ "anonymous", "object" ], + "id" : "450" + }, { + "range" : "220", + "domain" : "219", + "attributes" : [ "anonymous", "object" ], + "id" : "451" + }, { + "range" : "281", + "domain" : "105", + "attributes" : [ "anonymous", "object" ], + "id" : "452" + }, { + "range" : "281", + "domain" : "454", + "attributes" : [ "anonymous", "object" ], + "id" : "453" + }, { + "range" : "33", + "domain" : "270", + "attributes" : [ "anonymous", "object" ], + "id" : "455" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P172_contains", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "344", + "label" : { + "IRI-based" : "P172_contains", + "en" : "contains" + }, + "domain" : "100", + "comment" : { + "en" : "This property describes a minimum spatial extent which is contained within an instance of E53 Place. Since instances of E53 Place may not have precisely known spatial extents, the CIDOC CRM supports statements about minimum spatial extents of instances of E53 Place. This property allows an instance of E53 Places’s minimum spatial extent (i.e., its inner boundary or a point being within a Place) to be assigned an instance of E94 Space Primitive value.\nThis property is a shortcut of the fully developed path from E53 Place, P89i contains, E53 Place, P168 place is defined by to E94 Space Primitive" + }, + "attributes" : [ "datatype", "external" ], + "id" : "456" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P9_consists_of", + "inverse" : "303", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "231", + "label" : { + "de" : "setzt sich zusammen aus", + "IRI-based" : "P9_consists_of", + "ru" : "состоит из", + "pt" : "consiste de", + "el" : "αποτελείται από", + "en" : "consists of", + "fr" : "consiste en", + "zh" : "包括" + }, + "superproperty" : [ "301" ], + "domain" : "231", + "comment" : { + "en" : "This property associates an instance of E4 Period with another instance of E4 Period that is defined by a subset of the phenomena that define the former. Therefore, the spacetime volume of the latter must fall within the spacetime volume of the former.\nThis property is transitive and asymmetric." + }, + "attributes" : [ "object", "external" ], + "id" : "457" + }, { + "range" : "281", + "domain" : "325", + "attributes" : [ "anonymous", "object" ], + "id" : "458" + }, { + "range" : "267", + "domain" : "1", + "attributes" : [ "anonymous", "object" ], + "id" : "459" + }, { + "range" : "281", + "domain" : "331", + "attributes" : [ "anonymous", "object" ], + "id" : "460" + }, { + "range" : "267", + "domain" : "10", + "attributes" : [ "anonymous", "object" ], + "id" : "461" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P140i_was_attributed_by", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "233", + "label" : { + "de" : "bekam Merkmal zugewiesen durch", + "IRI-based" : "P140i_was_attributed_by", + "ru" : "получил атрибут посредством", + "pt" : "foi atribuído por", + "el" : "χαρακτηρίστηκε από", + "en" : "was attributed by", + "fr" : "a reçu un attribut par", + "zh" : "接受属性" + }, + "domain" : "40", + "subproperty" : [ "463", "464", "465", "466", "467" ], + "attributes" : [ "object", "external" ], + "id" : "462" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P35i_was_identified_by", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "251", + "label" : { + "de" : "wurde identifiziert durch", + "IRI-based" : "P35i_was_identified_by", + "ru" : "идентифицирован посредством", + "pt" : "foi identificado por", + "el" : "έχει διαπιστωθεί από", + "en" : "was identified by", + "fr" : "est identifié par", + "zh" : "被标识" + }, + "superproperty" : [ "234" ], + "domain" : "115", + "attributes" : [ "object", "external" ], + "id" : "252" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P68_foresees_use_of", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "97", + "label" : { + "de" : "sieht den Gebrauch vor von", + "IRI-based" : "P68_foresees_use_of", + "ru" : "обычно применяет", + "pt" : "normalmente emprega", + "el" : "συνήθως χρησιμοποιεί", + "en" : "foresees use of", + "fr" : "utilise habituellement", + "zh" : "预知使用" + }, + "superproperty" : [ "431" ], + "domain" : "31", + "comment" : { + "en" : "This property identifies an instance of E57 Material foreseen to be used by an instance of E29 Design or Procedure.\nE29 Designs and procedures commonly foresee the use of particular instances of E57 Material. The fabrication of adobe bricks, for example, requires straw, clay and water. This property enables this to be documented.\nThis property is not intended for the documentation of instances of E57 Materials that were used on a particular occasion when an instance of E29 Design or Procedure was executed." + }, + "attributes" : [ "object", "external" ], + "id" : "98" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P5_consists_of", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "115", + "label" : { + "de" : "besteht aus", + "IRI-based" : "P5_consists_of", + "ru" : "состоит из", + "pt" : "consiste de", + "el" : "αποτελείται από", + "en" : "consists of", + "fr" : "consiste en", + "zh" : "包括" + }, + "domain" : "115", + "comment" : { + "en" : "This property describes the decomposition of an instance of E3 Condition State into discrete, subsidiary states.\nIt is assumed that the sub-states into which the condition state is analysed form a logical whole - although the entire story may not be completely known – and that the sub-states are in fact constitutive of the general condition state. For example, a general condition state of “in ruins” may be decomposed into the individual stages of decay.\nThis property is transitive and asymmetric." + }, + "attributes" : [ "object", "external" ], + "id" : "407" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P166_was_a_presence_of", + "inverse" : "468", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "249", + "label" : { + "IRI-based" : "P166_was_a_presence_of", + "en" : "was a presence of" + }, + "superproperty" : [ "300" ], + "domain" : "173", + "comment" : { + "en" : "This property associates an instance of E93 Presence with the instance of E92 Spacetime Volume of which it represents a temporal restriction (i.e.: a time-slice). Instantiating this property constitutes a necessary part of the identity of the respective instance of E93 Presence." + }, + "attributes" : [ "object", "external" ], + "id" : "304" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P165i_is_incorporated_in", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "6", + "label" : { + "IRI-based" : "P165i_is_incorporated_in", + "en" : "is incorporated in" + }, + "superproperty" : [ "416" ], + "domain" : "132", + "attributes" : [ "object", "external" ], + "id" : "153" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P135i_was_created_by", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "311", + "label" : { + "de" : "wurde geschaffen durch", + "IRI-based" : "P135i_was_created_by", + "ru" : "был создан посредством", + "pt" : "foi criado por", + "el" : "δημιουργήθηκε από", + "en" : "was created by", + "fr" : "a été créé par", + "zh" : "被创建" + }, + "superproperty" : [ "210" ], + "domain" : "108", + "attributes" : [ "object", "external" ], + "id" : "212" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P43_has_dimension", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "36", + "label" : { + "de" : "hat Dimension", + "IRI-based" : "P43_has_dimension", + "ru" : "имеет величину", + "pt" : "tem dimensão", + "el" : "έχει μέγεθος", + "en" : "has dimension", + "fr" : "a pour dimension", + "zh" : "有度量规格" + }, + "domain" : "89", + "comment" : { + "en" : "This property records an instance of E54 Dimension of some instance of E70 Thing.\nIn the case that the recorded property is a result of a measurement of an instance of E18 Physical Thing, this property is a shortcut of the more fully developed path from E18 Physical Thing through P39i was measured by, E16 Measurement, P40 observed dimension to E54 Dimension.\nIt offers no information about how and when an E54 Dimension was established, nor by whom. Knowledge about an instance of E54 Dimension need not be the result of a measurement; it may be the result of evaluating data or other information, which should be documented as an instance of E13 Attribute Assignment.\nAn instance of E54 Dimension is specific to an instance of E70 Thing." + }, + "attributes" : [ "object", "external" ], + "id" : "383" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P79_beginning_is_qualified_by", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "470", + "label" : { + "de" : "hat Anfangsbegründung", + "IRI-based" : "P79_beginning_is_qualified_by", + "ru" : "начало ограничено", + "pt" : "início é qualificado por", + "el" : "αρχή προσδιορίζεται από", + "en" : "beginning is qualified by", + "fr" : "début est qualifié par", + "zh" : "起始限定" + }, + "domain" : "82", + "comment" : { + "en" : "This property associates an instance of E52 Time-Span with a note detailing the scholarly or scientific opinions and justifications about the certainty, precision, sources etc. of its beginning. Such notes may also be used to elaborate arguments about constraints or to give explanations of alternatives." + }, + "attributes" : [ "datatype", "external" ], + "id" : "469" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P1i_identifies", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "40", + "label" : { + "de" : "bezeichnet", + "IRI-based" : "P1i_identifies", + "ru" : "идентифицирует", + "pt" : "identifica", + "el" : "είναι αναγνωριστικό", + "en" : "identifies", + "fr" : "identifie", + "zh" : "标识" + }, + "domain" : "183", + "subproperty" : [ "380", "224" ], + "attributes" : [ "object", "external" ], + "id" : "381" + }, { + "range" : "45", + "domain" : "233", + "attributes" : [ "anonymous", "object" ], + "id" : "471" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P14_carried_out_by", + "inverse" : "149", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "78", + "label" : { + "de" : "wurde ausgeführt von", + "IRI-based" : "P14_carried_out_by", + "ru" : "выполнялся", + "pt" : "realizada por", + "el" : "πραγματοποιήθηκε από", + "en" : "carried out by", + "fr" : "réalisée par", + "zh" : "执行者是" + }, + "superproperty" : [ "22" ], + "domain" : "45", + "subproperty" : [ "472", "119", "148", "253" ], + "comment" : { + "en" : "This property describes the active participation of an instance of E39 Actor in an instance of E7 Activity.\nIt implies causal or legal responsibility. The P14.1 in the role of property of the property specifies the nature of an Actor’s participation." + }, + "attributes" : [ "object", "external" ], + "id" : "122" + }, { + "range" : "45", + "domain" : "120", + "attributes" : [ "anonymous", "object" ], + "id" : "473" + }, { + "range" : "267", + "domain" : "179", + "attributes" : [ "anonymous", "object" ], + "id" : "474" + }, { + "range" : "45", + "domain" : "267", + "attributes" : [ "anonymous", "object" ], + "id" : "475" + }, { + "range" : "45", + "domain" : "8", + "attributes" : [ "anonymous", "object" ], + "id" : "476" + }, { + "range" : "45", + "domain" : "77", + "attributes" : [ "anonymous", "object" ], + "id" : "477" + }, { + "range" : "45", + "domain" : "160", + "attributes" : [ "anonymous", "object" ], + "id" : "478" + }, { + "range" : "45", + "domain" : "60", + "attributes" : [ "anonymous", "object" ], + "id" : "479" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P122_borders_with", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "100", + "label" : { + "de" : "grenzt an", + "IRI-based" : "P122_borders_with", + "ru" : "граничит с", + "pt" : "fronteira com", + "el" : "συνορεύει με", + "en" : "borders with", + "fr" : "jouxte", + "zh" : "接壤于" + }, + "domain" : "100", + "comment" : { + "en" : "This symmetric property associates an instance of E53 Place with another instance of E53 Place which shares a part of its border.\nThis property is purely spatial. It does not imply that the phenomena that define, by their extent, places related by P122 borders with have ever shared a respective border at the same time or even coexisted. In particular, this may be the case when the respective common border is formed by a natural feature.\nThis property is not transitive. This property is symmetric." + }, + "attributes" : [ "object", "external" ], + "id" : "480" + }, { + "range" : "45", + "domain" : "69", + "attributes" : [ "anonymous", "object" ], + "id" : "481" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P177i_is_type_of_property_assigned", + "inverse" : "439", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "233", + "label" : { + "IRI-based" : "P177i_is_type_of_property_assigned", + "en" : "is type of property assigned" + }, + "superproperty" : [ "483" ], + "domain" : "108", + "attributes" : [ "object", "external" ], + "id" : "482" + }, { + "range" : "45", + "domain" : "63", + "attributes" : [ "anonymous", "object" ], + "id" : "484" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P156_occupies", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "100", + "label" : { + "IRI-based" : "P156_occupies", + "en" : "occupies" + }, + "superproperty" : [ "189", "171" ], + "domain" : "11", + "comment" : { + "en" : "This property describes the largest volume in space, an instance of E53 Place, that an instance of E18 Physical Thing has occupied at any time during its existence, with respect to the reference space relative to the physical thing itself. This allows for describing the thing itself as a place that may contain other things, such as a box that may contain coins. In other words, it is the volume that contains all the points which the thing has covered at some time during its existence. The reference space for the associated place must be the one that is permanently at rest (P157 is at rest relative to) relative to the physical thing. For instances of E19 Physical Objects it is the one which is at rest relative to the object itself, i.e., which moves together with the object. For instances of E26 Physical Feature it is one which is at rest relative to the physical feature itself and the surrounding matter immediately connected to it. Therefore, there is a 1:1 relation between the instance E18 Physical Thing and the instance of E53 Place it occupies. We include in the occupied space the space filled by the matter of the physical thing and all its inner spaces.\nThis property implies the fully developed path from E18 Physical Thing through P196 defines, E92 Spacetime Volume, P161 has spatial projection to E53 Place. However, in contrast to P156 occupies, the property P161 has spatial projection does not constrain the reference space of the referred instance of E53 Place.\nIn contrast to P156 occupies, for the property P53 has former or current location the following holds:\nIt does not constrain the reference space of the referred instance of E53 Place.\nIt identifies a possibly wider instance of E53 Place at which a thing is or has been for some unspecified time-span.\nIf the reference space of the referred instance of E53 Place is not at rest with respect to the physical thing found there, the physical thing may move away after some time to another place and/or may have been at some other place before. The same holds for the fully developed path from E18 Physical Thing through P196 defines, E92 Spacetime Volume, P161 has spatial projection to E53 Place." + }, + "attributes" : [ "object", "external" ], + "id" : "422" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P123i_resulted_from", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "17", + "label" : { + "de" : "ergab sich aus", + "IRI-based" : "P123i_resulted_from", + "ru" : "был результатом", + "pt" : "resultado de", + "el" : "προέκυψε από", + "en" : "resulted from", + "fr" : "est le résultat de", + "zh" : "起因于" + }, + "superproperty" : [ "194" ], + "domain" : "11", + "attributes" : [ "object", "external" ], + "id" : "353" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P90a_has_lower_value_limit", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "486", + "label" : { + "IRI-based" : "P90a_has_lower_value_limit", + "en" : "has lower value limit" + }, + "domain" : "36", + "attributes" : [ "datatype", "external" ], + "id" : "485" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P187_has_production_plan", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "31", + "label" : { + "IRI-based" : "P187_has_production_plan", + "en" : "has production plan" + }, + "domain" : "118", + "comment" : { + "en" : "This property associates an instance of E99 Product Type with an instance of E29 Design or Procedure that completely determines the production of instances of E18 Physical Thing. The resulting instances of E18 Physical Thing are considered exemplars of this instance of E99 Product Type when the process specified is correctly executed. Note that the respective instance of E29 Design or Procedure may not necessarily be fixed in a written/graphical form, and may require the use of tools or models unique to the product type. The same instance of E99 Product Type may be associated with several variant plans." + }, + "attributes" : [ "object", "external" ], + "id" : "487" + }, { + "iri" : "http://w3id.org/vir#K9i_has_status_assigned_by", + "baseIri" : "http://w3id.org/vir", + "range" : "28", + "label" : { + "IRI-based" : "K9i_has_status_assigned_by", + "undefined" : "has status assigned by" + }, + "superproperty" : [ "462" ], + "domain" : "11", + "comment" : { + "undefined" : "The property documents the assignment of status to a specific physical thing." + }, + "attributes" : [ "object" ], + "id" : "466" + }, { + "iri" : "http://w3id.org/vir#K6_has_back", + "baseIri" : "http://w3id.org/vir", + "range" : "325", + "label" : { + "IRI-based" : "K6_has_back", + "undefined" : "has back" + }, + "superproperty" : [ "288" ], + "domain" : "331", + "comment" : { + "undefined" : "The property documents the presence of a Verso or a Recto, respectively in the back or in the front of an object" + }, + "attributes" : [ "object" ], + "id" : "291" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P20_had_specific_purpose", + "inverse" : "489", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "198", + "label" : { + "de" : "hatte den bestimmten Zweck", + "IRI-based" : "P20_had_specific_purpose", + "ru" : "имел конкретную цель", + "pt" : "tinha propósito específico", + "el" : "είχε συγκεκριμένο σκοπό", + "en" : "had specific purpose", + "fr" : "avait pour but spécifique", + "zh" : "有特定目的" + }, + "domain" : "45", + "comment" : { + "en" : "This property identifies the relationship between a preparatory activity, an instance of E7 Activity and the instance of E5 Event it is intended to be preparation for.\nThis includes activities, orders and other organisational actions, taken in preparation for other activities or events.\nP20 had specific purpose (was purpose of) implies that an activity succeeded in achieving its aim. If it does not succeed, such as the setting of a trap that did not catch anything, one may document the unrealized intention using P21 had general purpose (was purpose of): E55 Type and/or P33 used specific technique (was used by): E29 Design or Procedure." + }, + "attributes" : [ "object", "external" ], + "id" : "488" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P196i_is_defined_by", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "11", + "label" : { + "IRI-based" : "P196i_is_defined_by", + "en" : "is defined by" + }, + "domain" : "249", + "attributes" : [ "object", "external" ], + "id" : "490" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P174i_ends_after_the_start_of", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "116", + "label" : { + "IRI-based" : "P174i_ends_after_the_start_of", + "en" : "ends after the start of" + }, + "superproperty" : [ "306" ], + "domain" : "116", + "subproperty" : [ "389", "141" ], + "attributes" : [ "object", "external" ], + "id" : "307" + }, { + "range" : "45", + "domain" : "226", + "attributes" : [ "anonymous", "object" ], + "id" : "491" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P145i_left_by", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "226", + "label" : { + "de" : "wurde entlassen durch", + "IRI-based" : "P145i_left_by", + "en" : "left by", + "zh" : "留下" + }, + "superproperty" : [ "199" ], + "domain" : "78", + "attributes" : [ "object", "external" ], + "id" : "336" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P10i_contains", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "249", + "label" : { + "de" : "enthält", + "IRI-based" : "P10i_contains", + "ru" : "содержит", + "pt" : "contém", + "el" : "περιλαμβάνει", + "en" : "contains", + "fr" : "contient", + "zh" : "包含" + }, + "superproperty" : [ "302" ], + "domain" : "249", + "subproperty" : [ "457", "468" ], + "attributes" : [ "object", "external" ], + "id" : "301" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P92_brought_into_existence", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "278", + "label" : { + "de" : "brachte in Existenz", + "IRI-based" : "P92_brought_into_existence", + "ru" : "создал", + "pt" : "trouxe à existência", + "el" : "γέννησε", + "en" : "brought into existence", + "fr" : "a fait exister", + "zh" : "导致存在的是" + }, + "superproperty" : [ "187" ], + "domain" : "2", + "subproperty" : [ "193", "442", "211", "384", "110" ], + "comment" : { + "en" : "This property links an instance of E63 Beginning of Existence to the instance of E77 Persistent Item brought into existence by it.\nIt allows a “start” to be attached to any instance of E77 Persistent Item being documented, i.e., as instances of E70 Thing, E72 Legal Object, E39 Actor, E41 Appellation and E55 Type." + }, + "attributes" : [ "object", "external" ], + "id" : "113" + }, { + "range" : "231", + "domain" : "198", + "attributes" : [ "anonymous", "object" ], + "id" : "492" + }, { + "range" : "198", + "domain" : "2", + "attributes" : [ "anonymous", "object" ], + "id" : "493" + }, { + "range" : "78", + "domain" : "111", + "attributes" : [ "anonymous", "object" ], + "id" : "494" + }, { + "range" : "78", + "domain" : "20", + "attributes" : [ "anonymous", "object" ], + "id" : "495" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P180_has_currency", + "inverse" : "38", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "65", + "label" : { + "IRI-based" : "P180_has_currency", + "en" : "has currency" + }, + "superproperty" : [ "37" ], + "domain" : "207", + "comment" : { + "en" : "This property establishes the relationship between an instance of E97 Monetary Amount and the instance of E98 Currency that it is measured in." + }, + "attributes" : [ "object", "external" ], + "id" : "496" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P127_has_broader_term", + "inverse" : "285", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "108", + "label" : { + "de" : "hat den Oberbegriff", + "IRI-based" : "P127_has_broader_term", + "ru" : "имеет вышестоящий термин", + "pt" : "tem termo genérico", + "el" : "έχει ευρύτερο όρο", + "en" : "has broader term", + "fr" : "a pour terme générique", + "zh" : "上位词" + }, + "domain" : "108", + "comment" : { + "en" : "This property associates an instance of E55 Type with another instance of E55 Type that has a broader meaning.\nIt allows instances of E55 Types to be organised into hierarchies. This is the sense of \"broader term generic (BTG)\" as defined in ISO 25964-2:2013 (International Organization for Standardization 2013).\nThis property is transitive. This property is asymmetric." + }, + "attributes" : [ "object", "external" ], + "id" : "497" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P106i_forms_part_of", + "inverse" : "154", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "132", + "label" : { + "de" : "bildet Teil von", + "IRI-based" : "P106i_forms_part_of", + "ru" : "формирует часть", + "pt" : "faz parte de", + "el" : "αποτελεί μέρος του/της", + "en" : "forms part of", + "fr" : "fait partie de", + "zh" : "构成部分" + }, + "domain" : "132", + "subproperty" : [ "415", "153" ], + "attributes" : [ "object", "external" ], + "id" : "416" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P137i_is_exemplified_by", + "inverse" : "109", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "40", + "label" : { + "de" : "erläutert durch Beispiel", + "IRI-based" : "P137i_is_exemplified_by", + "ru" : "поясняется посредством", + "pt" : "exemplifica", + "el" : "δειγματίζεται από", + "en" : "is exemplified by", + "fr" : "est exemplifié par", + "zh" : "被例示" + }, + "superproperty" : [ "483" ], + "domain" : "108", + "subproperty" : [ "499" ], + "attributes" : [ "object", "external" ], + "id" : "498" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P164_is_temporally_specified_by", + "inverse" : "501", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "82", + "label" : { + "IRI-based" : "P164_is_temporally_specified_by", + "en" : "is temporally specified by" + }, + "superproperty" : [ "502" ], + "domain" : "173", + "comment" : { + "en" : "This property relates an instance of E93 Presence with the instance of E52 Time-Span that defines the time-slice of the spacetime volume that this instance of E93 Presence is related to via the property P166 was a presence of (had presence).\nThere are two typical cases for the determination of the related instance of E52 Time-Span. In the first, it is the temporal extent of an instance of E2 Temporal Entity (documented with P4 has time-span (is time-span of)): this then documents the simultaneity of the instance of E93 Presence and the instance of E2 Temporal Entity, even if the absolute time-span is not known, and can be regarded as a phenomenal time-span. In the second, the instance of E52 Time-Span is a date range declared in or derived from historical sources or provided by dating methods: this is a declarative time-span." + }, + "attributes" : [ "object", "external" ], + "id" : "500" + }, { + "iri" : "http://w3id.org/vir#K14_symbolize", + "baseIri" : "http://w3id.org/vir", + "range" : "132", + "label" : { + "IRI-based" : "K14_symbolize", + "undefined" : "symbolize" + }, + "superproperty" : [ "374" ], + "domain" : "133", + "comment" : { + "undefined" : "The property indicates the symbolic value of the attribute presents in a representation" + }, + "attributes" : [ "object" ], + "id" : "437" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P134i_was_continued_by", + "inverse" : "47", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "45", + "label" : { + "de" : "wurde fortgesetzt durch", + "IRI-based" : "P134i_was_continued_by", + "ru" : "был продолжен", + "pt" : "foi continuada por", + "el" : "συνεχίστηκε από", + "en" : "was continued by", + "fr" : "a été continuée par", + "zh" : "被继续" + }, + "superproperty" : [ "314", "136" ], + "domain" : "45", + "attributes" : [ "object", "external" ], + "id" : "137" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P38i_was_deassigned_by", + "inverse" : "155", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "156", + "label" : { + "de" : "wurde aufgehoben durch", + "IRI-based" : "P38i_was_deassigned_by", + "ru" : "был отменен посредством", + "pt" : "foi retirada a atribuição por", + "el" : "ακυρώθηκε από", + "en" : "was deassigned by", + "fr" : "a été désattribué par", + "zh" : "被取消" + }, + "superproperty" : [ "234" ], + "domain" : "157", + "attributes" : [ "object", "external" ], + "id" : "503" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P22_transferred_title_to", + "inverse" : "164", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "78", + "label" : { + "de" : "übertrug Besitztitel auf", + "IRI-based" : "P22_transferred_title_to", + "ru" : "передал право собственности", + "pt" : "transferiu os direitos de propriedade para", + "el" : "μετεβίβασε τον τίτλο σε", + "en" : "transferred title to", + "fr" : "a fait passer le droit de propriété à", + "zh" : "转移所有权至" + }, + "superproperty" : [ "122" ], + "domain" : "60", + "comment" : { + "en" : "This property identifies the instance of E39 Actor that acquires the legal ownership of an object as a result of an instance of E8 Acquisition.\nThe property will typically describe an Actor purchasing or otherwise acquiring an object from another Actor. However, title may also be acquired, without any corresponding loss of title by another Actor, through legal fieldwork such as hunting, shooting or fishing.\nIn reality the title is either transferred to or from someone, or both." + }, + "attributes" : [ "object", "external" ], + "id" : "472" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P174_starts_before_the_end_of", + "inverse" : "307", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "116", + "label" : { + "IRI-based" : "P174_starts_before_the_end_of", + "en" : "starts before the end of" + }, + "superproperty" : [ "504" ], + "domain" : "116", + "subproperty" : [ "140", "315" ], + "comment" : { + "en" : "This property specifies that the temporal extent of the domain instance A of E2 Temporal Entity starts definitely before the end of the temporal extent of the range instance B of E2 Temporal Entity.\nIn other words, if A = [A-start, A-end] and B = [B-start, B-end], we mean A-start < B-end is true.\nThis property is part of the set of temporal primitives P173 – P176, P182 – P185.\nThis property corresponds to a disjunction (logical OR) of the following Allen temporal relations (Allen, 1983): {before, meets, overlaps, starts, started-by, contains, finishes, finished-by, equals, during, overlapped by}\nTypically, this property is a consequence of a known influence of some event on another event or activity, such as a novel written by someone being continued by someone else, or the knowledge of a defeat on a distant battlefield causing people to end their ongoing activities. This property is not transitive. This property is irreflexive.\n\nFigure 10: Temporal entity A starts before the end of temporal entity B. Here A is longer than B\n\nFigure 11: Temporal entity A starts before the end of temporal entity B. Here A is shorter than B" + }, + "attributes" : [ "object", "external" ], + "id" : "142" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P103_was_intended_for", + "inverse" : "506", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "108", + "label" : { + "de" : "bestimmt für", + "IRI-based" : "P103_was_intended_for", + "ru" : "был задуман для", + "pt" : "era destinado à", + "el" : "προοριζόταν για", + "en" : "was intended for", + "fr" : "était destiné à", + "zh" : "被用于" + }, + "domain" : "44", + "comment" : { + "en" : "This property links an instance of E71 Human-Made Thing to an instance of E55 Type describing its intended usage.\nIt creates a relation between specific human-made things, both physical and immaterial, to types of intended methods and techniques of use. Note: A link between specific human-made things and a specific use activity should be expressed using P19 was intended use of (was made for)." + }, + "attributes" : [ "object", "external" ], + "id" : "505" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P164i_temporally_specifies", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "173", + "label" : { + "IRI-based" : "P164i_temporally_specifies", + "en" : "temporally specifies" + }, + "superproperty" : [ "507" ], + "domain" : "82", + "attributes" : [ "object", "external" ], + "id" : "501" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P101i_was_use_of", + "inverse" : "417", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "89", + "label" : { + "de" : "war die Verwendung von", + "IRI-based" : "P101i_was_use_of", + "ru" : "был применением для", + "pt" : "foi uso de", + "el" : "ήταν χρήση του/της", + "en" : "was use of", + "fr" : "était l’utilisation de", + "zh" : "被用于" + }, + "domain" : "108", + "attributes" : [ "object", "external" ], + "id" : "508" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P53i_is_former_or_current_location_of", + "inverse" : "171", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "11", + "label" : { + "de" : "ist früherer oder derzeitiger Standort von", + "IRI-based" : "P53i_is_former_or_current_location_of", + "ru" : "является текущим или бывшим местоположением для", + "pt" : "é ou foi localização de", + "el" : "είναι ή ήταν θέση του", + "en" : "is former or current location of", + "fr" : "est ou a été localisation de", + "zh" : "是之前或当前位置" + }, + "domain" : "100", + "subproperty" : [ "170", "190" ], + "attributes" : [ "object", "external" ], + "id" : "509" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P96i_gave_birth", + "inverse" : "201", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "15", + "label" : { + "de" : "gebar", + "IRI-based" : "P96i_gave_birth", + "ru" : "дал рождение", + "pt" : "deu nascimento", + "el" : "ήταν μητέρα του/της", + "en" : "gave birth", + "fr" : "a donné naissance à", + "zh" : "生育" + }, + "superproperty" : [ "199" ], + "domain" : "111", + "attributes" : [ "object", "external" ], + "id" : "510" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P156i_is_occupied_by", + "inverse" : "422", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "11", + "label" : { + "IRI-based" : "P156i_is_occupied_by", + "en" : "is occupied by" + }, + "superproperty" : [ "509", "188" ], + "domain" : "100", + "attributes" : [ "object", "external" ], + "id" : "190" + }, { + "range" : "33", + "domain" : "265", + "attributes" : [ "anonymous", "object" ], + "id" : "511" + }, { + "range" : "33", + "domain" : "57", + "attributes" : [ "anonymous", "object" ], + "id" : "512" + }, { + "range" : "116", + "domain" : "231", + "attributes" : [ "anonymous", "object" ], + "id" : "513" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P139i_is_alternative_form_of", + "inverse" : "276", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "183", + "label" : { + "IRI-based" : "P139i_is_alternative_form_of", + "en" : "is alternative form of" + }, + "domain" : "183", + "attributes" : [ "object", "external" ], + "id" : "514" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P173_starts_before_or_with_the_end_of", + "inverse" : "306", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "116", + "label" : { + "IRI-based" : "P173_starts_before_or_with_the_end_of", + "en" : "starts before or with the end of" + }, + "domain" : "116", + "subproperty" : [ "142" ], + "comment" : { + "en" : "This property specifies that the temporal extent of the domain instance A of E2 Temporal Entity starts before or simultaneously with the end of the temporal extent of the range instance B of E2 Temporal Entity.\nIn other words, if A = [A-start, A-end] and B = [B-start, B-end], we mean A-start ≤ B-end is true.\nThis property is part of the set of temporal primitives P173 – P176, P182 – P185.\nThis property corresponds to the disjunction (logical OR) of the following Allen temporal relations (Allen, 1983): {before, meets, met-by, overlaps, starts, started-by, contains, finishes, finished-by, equals, during, overlapped by}.\nThis property is not transitive.\n\nFigure 8: Temporal entity A starts before or with the end of temporal entity B. Here A is longer than B\n\nFigure 9: Temporal entity A starts before or with the end of temporal entity B. Here A is shorter than B" + }, + "attributes" : [ "object", "external" ], + "id" : "504" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P140_assigned_attribute_to", + "inverse" : "462", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "40", + "label" : { + "de" : "wies Merkmal zu", + "IRI-based" : "P140_assigned_attribute_to", + "ru" : "присвоил атрибут для", + "pt" : "atribuiu atributo para", + "el" : "απέδωσε ιδιότητα σε", + "en" : "assigned attribute to", + "fr" : "a affecté un attribut à", + "zh" : "分配属性于" + }, + "domain" : "233", + "subproperty" : [ "515", "516", "358", "400", "517" ], + "comment" : { + "en" : "This property associates an instance of E13 Attribute Assignment with the instance of E1 CRM Entity about which it made an attribution. The instance of E1 CRM Entity plays the role of the domain of the attribution.\nThe kind of attribution made should be documented using P177 assigned property of type (is type of property assigned)." + }, + "attributes" : [ "object", "external" ], + "id" : "359" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P103i_was_intention_of", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "44", + "label" : { + "de" : "war Bestimmung von", + "IRI-based" : "P103i_was_intention_of", + "ru" : "был интенцией для", + "pt" : "era a destinação de", + "el" : "ήταν προορισμός του", + "en" : "was intention of", + "fr" : "était la raison d'être de", + "zh" : "目的是" + }, + "domain" : "108", + "attributes" : [ "object", "external" ], + "id" : "506" + }, { + "iri" : "http://w3id.org/vir#K7_is_recto_of", + "baseIri" : "http://w3id.org/vir", + "range" : "355", + "label" : { + "IRI-based" : "K7_is_recto_of", + "undefined" : "is recto of" + }, + "superproperty" : [ "290" ], + "domain" : "331", + "comment" : { + "undefined" : "The property indicates the presence of a recto in the described object" + }, + "attributes" : [ "object" ], + "id" : "518" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P42_assigned", + "inverse" : "519", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "108", + "label" : { + "de" : "wies zu", + "IRI-based" : "P42_assigned", + "ru" : "назначил", + "pt" : "atribuiu", + "el" : "απέδωσε ως ιδιότητα", + "en" : "assigned", + "fr" : "a attribué", + "zh" : "分配类型" + }, + "superproperty" : [ "158" ], + "domain" : "401", + "comment" : { + "en" : "This property records the type that was assigned to an entity by an E17 Type Assignment activity.\nType assignment events allow a more detailed path from E1 CRM Entity through P41i was classified by, E17 Type Assignment, P42 assigned, to E55 Type for assigning types to objects compared to the shortcut offered by P2 has type (is type of).\nFor example, a fragment of an antique vessel could be assigned the type “attic red figured belly handled amphora” by expert A. The same fragment could be assigned the type “shoulder handled amphora” by expert B.\nA Type may be intellectually constructed independent from assigning an instance of it." + }, + "attributes" : [ "object", "external" ], + "id" : "239" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P17_was_motivated_by", + "inverse" : "139", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "40", + "label" : { + "de" : "wurde angeregt durch", + "IRI-based" : "P17_was_motivated_by", + "ru" : "был обусловлен посредством", + "pt" : "foi motivado por", + "el" : "είχε ως αφορμή", + "en" : "was motivated by", + "fr" : "a été motivée par", + "zh" : "被促动" + }, + "superproperty" : [ "49" ], + "domain" : "45", + "comment" : { + "en" : "This property describes an item or items that are regarded as a reason for carrying out the instance of E7 Activity.\nFor example, the discovery of a large hoard of treasure may call for a celebration, an order from headquarters can start a military manoeuvre." + }, + "attributes" : [ "object", "external" ], + "id" : "520" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P175_starts_before_or_with_the_start_of", + "inverse" : "389", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "116", + "label" : { + "IRI-based" : "P175_starts_before_or_with_the_start_of", + "en" : "starts before or with the start of" + }, + "superproperty" : [ "142" ], + "domain" : "116", + "subproperty" : [ "314" ], + "comment" : { + "en" : "This property specifies that the temporal extent of the domain instance A of E2 Temporal Entity starts before or simultaneously with the start of the temporal extent of the range instance B of E2 Temporal Entity.\nIn other words, if A = [A-start, A-end] and B = [B-start, B-end], we mean A-start ≤ B-start is true.\nThis property is part of the set of temporal primitives P173 – P176, P182 – P185.\nThis property corresponds to a disjunction (logical OR) of the following Allen temporal relations (Allen, 1983): {before, meets, overlaps, starts, started-by, contains, finished-by, equals}\nIn a model with fuzzy borders, this property will not be transitive.\nThis property is irreflexive.\n\nFigure 12: Temporal entity A starts before or with the start of temporal entity B. Here A is longer than B\n\nFigure 13: Temporal entity A starts before or with the start of temporal entity B. Here A is shorter than B" + }, + "attributes" : [ "object", "external" ], + "id" : "315" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P52i_is_current_owner_of", + "inverse" : "256", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "11", + "label" : { + "de" : "ist derzeitiger Besitzer von", + "IRI-based" : "P52i_is_current_owner_of", + "ru" : "является текущим владельцем для", + "pt" : "é proprietário de", + "el" : "είναι ιδιοκτήτης του", + "en" : "is current owner of", + "fr" : "est le propriétaire actuel de", + "zh" : "是当前所有者" + }, + "superproperty" : [ "343", "242" ], + "domain" : "78", + "attributes" : [ "object", "external" ], + "id" : "243" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P147_curated", + "inverse" : "322", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "104", + "label" : { + "de" : "betreute kuratorisch", + "IRI-based" : "P147_curated", + "en" : "curated", + "zh" : "管理" + }, + "domain" : "69", + "comment" : { + "en" : "This property associates an instance of E87 Curation Activity with the instance of E78 Curated Holding with that is subject of that curation activity following some implicit or explicit curation plan." + }, + "attributes" : [ "object", "external" ], + "id" : "521" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P128_carries", + "inverse" : "411", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "132", + "label" : { + "de" : "trägt", + "IRI-based" : "P128_carries", + "ru" : "несет", + "pt" : "é o suporte de", + "el" : "φέρει", + "en" : "carries", + "fr" : "est le support de", + "zh" : "承载" + }, + "superproperty" : [ "146" ], + "domain" : "11", + "subproperty" : [ "373" ], + "comment" : { + "en" : "This property identifies an instance E90 Symbolic Object carried by an instance of E18 Physical Thing. Since an instance of E90 Symbolic Object is defined as an immaterial idealization over potentially multiple carriers, any individual realization on a particular physical carrier may be defective, due to deterioration or shortcomings in the process of creating the realization compared to the intended ideal. As long as such defects do not substantially affect the complete recognition of the respective symbolic object, it is still regarded as carrying an instance of this E90 Symbolic Object. If these defects are of scholarly interest, the particular realization can be modelled as an instance of E25 Human-Made Feature. Note, that any instance of E90 Symbolic Object incorporated (P165) in the carried symbolic object is also carried by the same instance of E18 Physical Thing." + }, + "attributes" : [ "object", "external" ], + "id" : "151" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P50_has_current_keeper", + "inverse" : "168", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "78", + "label" : { + "de" : "hat derzeitigen Betreuer", + "IRI-based" : "P50_has_current_keeper", + "ru" : "имеет текущего смотрителя", + "pt" : "é guardada por", + "el" : "είναι στην κατοχή του", + "en" : "has current keeper", + "fr" : "est actuellement détenu par", + "zh" : "有当前保管者" + }, + "superproperty" : [ "166" ], + "domain" : "11", + "comment" : { + "en" : "This property identifies the instance of E39 Actor that had custody of an instance of E18 Physical Thing at the time of validity of the record or database containing the statement that uses this property.\nThis property is a shortcut for the more detailed path from E18 Physical Thing through, P30i custody transferred through, E10 Transfer of Custody, P29 custody received by to E39 Actor, if and only if the custody has not been surrendered by the receiving actor at any later time" + }, + "attributes" : [ "object", "external" ], + "id" : "522" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P106_is_composed_of", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "132", + "label" : { + "de" : "ist zusammengesetzt aus", + "IRI-based" : "P106_is_composed_of", + "ru" : "составлен из", + "pt" : "é composto de", + "el" : "αποτελείται από", + "en" : "is composed of", + "fr" : "est composé de", + "zh" : "组成成分是" + }, + "domain" : "132", + "subproperty" : [ "523", "152" ], + "comment" : { + "en" : "This property associates an instance of E90 Symbolic Object with a part of it that is by itself an instance of E90 Symbolic Object, such as fragments of texts or clippings from an image.\nThis property is transitive asymmetric." + }, + "attributes" : [ "object", "external" ], + "id" : "154" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P97i_was_father_for", + "inverse" : "525", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "15", + "label" : { + "de" : "war Vater für", + "IRI-based" : "P97i_was_father_for", + "ru" : "был отцом для", + "pt" : "foi pai para", + "el" : "ήταν πατέρας του/της", + "en" : "was father for", + "fr" : "a été père dans", + "zh" : "是父亲" + }, + "domain" : "111", + "attributes" : [ "object", "external" ], + "id" : "524" + }, { + "iri" : "http://w3id.org/vir#K15i_has_been_used_by", + "baseIri" : "http://w3id.org/vir", + "range" : "1", + "label" : { + "IRI-based" : "K15i_has_been_used_by", + "undefined" : "has been used by" + }, + "superproperty" : [ "128" ], + "domain" : "30", + "comment" : { + "undefined" : "The property indicates the specific attribute used during the production of a visual object" + }, + "attributes" : [ "object" ], + "id" : "131" + }, { + "iri" : "http://w3id.org/vir#K17_has_attribute", + "baseIri" : "http://w3id.org/vir", + "range" : "30", + "label" : { + "IRI-based" : "K17_has_attribute", + "undefined" : "has attribute" + }, + "superproperty" : [ "154" ], + "domain" : "126", + "comment" : { + "undefined" : "This property associates an attribute with the iconographical object where it is depicted" + }, + "attributes" : [ "object" ], + "id" : "523" + }, { + "iri" : "http://w3id.org/vir#K10i_is_basis_for", + "baseIri" : "http://w3id.org/vir", + "range" : "51", + "label" : { + "IRI-based" : "K10i_is_basis_for", + "undefined" : "is based on" + }, + "superproperty" : [ "130" ], + "domain" : "3", + "comment" : { + "undefined" : "The property describes the source used for the status assignment" + }, + "attributes" : [ "object" ], + "id" : "197" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P128i_is_carried_by", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "11", + "label" : { + "de" : "wird getragen von", + "IRI-based" : "P128i_is_carried_by", + "ru" : "переносится посредством", + "pt" : "é suportado por", + "el" : "φέρεται από", + "en" : "is carried by", + "fr" : "a pour support", + "zh" : "被承载" + }, + "superproperty" : [ "150" ], + "domain" : "132", + "subproperty" : [ "410" ], + "attributes" : [ "object", "external" ], + "id" : "411" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P93_took_out_of_existence", + "inverse" : "216", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "278", + "label" : { + "de" : "beendete die Existenz von", + "IRI-based" : "P93_took_out_of_existence", + "ru" : "положил конец существованию", + "pt" : "cessou a existência de", + "el" : "αναίρεσε", + "en" : "took out of existence", + "fr" : "a fait cesser d’exister", + "zh" : "结束存在的是" + }, + "superproperty" : [ "187" ], + "domain" : "71", + "subproperty" : [ "18", "162", "526", "379" ], + "comment" : { + "en" : "This property links an instance of E64 End of Existence to the instance of E77 Persistent Item taken out of existence by it.\nIn the case of immaterial things, the instance of E64 End of Existence is considered to take place with the destruction of the last physical carrier.\nThis allows an “end” to be attached to any instance of E77 Persistent Item being documented i.e., instances of E70 Thing, E72 Legal Object, E39 Actor, E41 Appellation and E55 Type. For many instances of E77 Persistent Item we know the maximum life-span and can infer that they must have ended to exist. We assume in that case an instance of E64 End of Existence, which may be as unnoticeable as forgetting the secret knowledge by the last representative of some indigenous nation." + }, + "attributes" : [ "object", "external" ], + "id" : "23" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P160_has_temporal_projection", + "inverse" : "507", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "82", + "label" : { + "IRI-based" : "P160_has_temporal_projection", + "en" : "has temporal projection" + }, + "domain" : "249", + "subproperty" : [ "500" ], + "comment" : { + "en" : "This property describes the temporal projection of an instance of E92 Spacetime Volume. The property P4 has time-span is the same as P160 has temporal projection if it is used to document an instance of E4 Period or any subclass of it." + }, + "attributes" : [ "object", "external" ], + "id" : "502" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P39i_was_measured_by", + "inverse" : "358", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "273", + "label" : { + "de" : "wurde vermessen durch", + "IRI-based" : "P39i_was_measured_by", + "ru" : "был измерен посредством", + "pt" : "foi medida por", + "el" : "μετρήθηκε από", + "en" : "was measured by", + "fr" : "a été mesuré par", + "zh" : "被测量" + }, + "superproperty" : [ "462" ], + "domain" : "11", + "attributes" : [ "object", "external" ], + "id" : "463" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P56_bears_feature", + "inverse" : "356", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "281", + "label" : { + "de" : "trägt Merkmal", + "IRI-based" : "P56_bears_feature", + "ru" : "несет признак", + "pt" : "possui característica", + "el" : "φέρει μόρφωμα", + "en" : "bears feature", + "fr" : "présente pour caractéristique", + "zh" : "有特征" + }, + "superproperty" : [ "288" ], + "domain" : "134", + "subproperty" : [ "527", "518" ], + "comment" : { + "en" : "This property links an instance of E19 Physical Object to an instance of E26 Physical Feature that it bears.\nAn instance of E26 Physical Feature can only exist on one object. One object may bear more than one E26 Physical Feature. An instance of E27 Site should be considered as an instance of E26 Physical Feature on the surface of the Earth.\nAn instance B of E26 Physical Feature being a detail of the structure of another instance A of E26 Physical Feature can be linked to B by use of the property P46 is composed of (forms part of). This implies that the subfeature B is P56i is found on the same E19 Physical Object as A.\nThis property is a shortcut. A more detailed representation can make use of the fully developed (i.e., indirect) path E19 Physical Object, through, P59 has section, E53 Place, P53i is former or current location of to E26 Physical Feature." + }, + "attributes" : [ "object", "external" ], + "id" : "290" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P187i_is_production_plan_for", + "inverse" : "487", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "118", + "label" : { + "IRI-based" : "P187i_is_production_plan_for", + "en" : "is production plan for" + }, + "domain" : "31", + "attributes" : [ "object", "external" ], + "id" : "528" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P105_right_held_by", + "inverse" : "242", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "78", + "label" : { + "de" : "Rechte stehen zu", + "IRI-based" : "P105_right_held_by", + "ru" : "право принадлежит", + "pt" : "são direitos de", + "el" : "δικαίωμα κατέχεται από", + "en" : "right held by", + "fr" : "droit détenu par", + "zh" : "持有权利的是" + }, + "domain" : "88", + "subproperty" : [ "256" ], + "comment" : { + "en" : "This property identifies the instance of E39 Actor who holds the instances of E30 Right to an instance of E72 Legal Object.\nIt is a superproperty of P52 has current owner (is current owner of) because ownership is a right that is held on the owned object.\nThis property is a shortcut of the fully developed path from E72 Legal Object, P104 is subject to, E30 Right, P75i is possessed by to E39 Actor." + }, + "attributes" : [ "object", "external" ], + "id" : "257" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P108_has_produced", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "41", + "label" : { + "de" : "hat hergestellt", + "IRI-based" : "P108_has_produced", + "ru" : "произвел", + "pt" : "produziu", + "el" : "παρήγαγε", + "en" : "has produced", + "fr" : "a produit", + "zh" : "已产生了" + }, + "superproperty" : [ "13", "113" ], + "domain" : "1", + "comment" : { + "en" : "This property identifies the instance of E24 Physical Human-Made Thing that came into existence as a result of the instance of E12 Production.\nThe identity of an instance of E24 Physical Human-Made Thing is not defined by its matter, but by its existence as a subject of documentation. An E12 Production can result in the creation of multiple instances of E24 Physical Human-Made Thing." + }, + "attributes" : [ "object", "external" ], + "id" : "193" + }, { + "iri" : "http://w3id.org/vir#K22_has_personification", + "baseIri" : "http://w3id.org/vir", + "range" : "85", + "label" : { + "IRI-based" : "K22_has_personification", + "undefined" : "has personification" + }, + "superproperty" : [ "374" ], + "domain" : "126", + "comment" : { + "undefined" : "This property indicates the membership of a personification in an iconographical object" + }, + "attributes" : [ "object" ], + "id" : "433" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P161_has_spatial_projection", + "inverse" : "248", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "100", + "label" : { + "IRI-based" : "P161_has_spatial_projection", + "en" : "has spatial projection" + }, + "domain" : "249", + "subproperty" : [ "312" ], + "comment" : { + "en" : "This property associates an instance of an instance of E92 Spacetime Volume with an instance of E53 Place that is the result of the spatial projection of the instance of the E92 Spacetime Volume on a reference space.\nIn general, there can be more than one useful reference space (for reference space see P156 occupies and P157 is at rest relative to) to describe the spatial projection of a spacetime volume, for example, in describing a sea battle, the difference between the battle ship and the seafloor as reference spaces. Thus, it can be seen that the projection is not unique.\nThe spatial projection is the actual spatial coverage of a spacetime volume, which normally has fuzzy boundaries except for instances of E92 Spacetime Volumes which are geometrically defined in the same reference system as the range of this property are an exception to this and do not have fuzzy boundaries. Modelling explicitly fuzzy spatial projections serves therefore as a common topological reference of different spatial approximations rather than absolute geometric determination, for instance for relating outer or inner spatial boundaries for the respective spacetime volumes.\nIn case the domain of an instance of P161 has spatial projection is an instance of E4 Period, the spatial projection describes all areas that period was ever present at, for instance, the Roman Empire.\nThis property is part of the fully developed path from E18 Physical Thing through P196 defines, E92 Spacetime Volume, P161 has spatial projection to E53 Place, which in turn is implied by P156 occupies (is occupied by).\nThis property is part of the fully developed path from E4 Period through P161 has spatial projection, E53 Place, P89 falls within (contains) to E53 Place, which in turn is shortcut by P7 took place at (witnessed)." + }, + "attributes" : [ "object", "external" ], + "id" : "313" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P50i_is_current_keeper_of", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "11", + "label" : { + "de" : "ist derzeitiger Betreuer von", + "IRI-based" : "P50i_is_current_keeper_of", + "ru" : "является текущим смотрителем для", + "pt" : "é guardador de", + "el" : "κατέχει", + "en" : "is current keeper of", + "fr" : "est actuel détenteur de", + "zh" : "是当前保管者" + }, + "superproperty" : [ "165" ], + "domain" : "78", + "attributes" : [ "object", "external" ], + "id" : "168" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P195_was_a_presence_of", + "inverse" : "446", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "11", + "label" : { + "IRI-based" : "P195_was_a_presence_of", + "en" : "was a presence of" + }, + "domain" : "173", + "comment" : { + "en" : "This property associates an instance of E93 Presence with the instance of E18 Physical Thing of which it represents a temporal restriction (i.e.: a time-slice) of the thing’s trajectory through spacetime. In other words, it describes where the instance of E18 Physical Thing was or moved around within a given time-span. Instantiating this property constitutes a necessary part of the identity of the respective instance of E93 Presence.\nThis property is a strong shortcut of the fully developed path from E18 Physical Thing through P196 defines, E92 Spacetime Volume, P166 was a presence of (had presence) to E93 Presence." + }, + "attributes" : [ "object", "external" ], + "id" : "529" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P148_has_component", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "3", + "label" : { + "de" : "hat Bestandteil", + "IRI-based" : "P148_has_component", + "en" : "has component", + "zh" : "有组件" + }, + "domain" : "3", + "subproperty" : [ "530" ], + "comment" : { + "en" : "This property associates an instance of E89 Propositional Object with a structural part of it that is by itself an instance of E89 Propositional Object.\nThis property is transitive. This property is asymmetric." + }, + "attributes" : [ "object", "external" ], + "id" : "54" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P151_was_formed_from", + "inverse" : "531", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "20", + "label" : { + "IRI-based" : "P151_was_formed_from", + "en" : "was formed from" + }, + "superproperty" : [ "22" ], + "domain" : "63", + "comment" : { + "en" : "This property associates an instance of E66 Formation with an instance of E74 Group from which the new group was formed preserving a sense of continuity such as in mission, membership or tradition." + }, + "attributes" : [ "object", "external" ], + "id" : "203" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P1_is_identified_by", + "inverse" : "381", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "183", + "label" : { + "de" : "wird bezeichnet als", + "IRI-based" : "P1_is_identified_by", + "ru" : "идентифицируется посредством", + "pt" : "é identificado por", + "el" : "αναγνωρίζεται ως", + "en" : "is identified by", + "fr" : "est identifiée par", + "zh" : "被标识为" + }, + "domain" : "40", + "subproperty" : [ "532", "223" ], + "comment" : { + "en" : "This property describes the naming or identification of any real-world item by a name or any other identifier.\nThis property is intended for identifiers in general use, which form part of the world the model intends to describe, and not merely for internal database identifiers which are specific to a technical system, unless these latter also have a more general use outside the technical context. This property includes in particular identification by mathematical expressions such as coordinate systems used for the identification of instances of E53 Place. The property does not reveal anything about when, where and by whom this identifier was used. A more detailed representation can be made using the fully developed (i.e., indirect) path through E15 Identifier Assignment.\nThis property is a shortcut for the path from E1 CRM Entity through P140i was attributed by, E15 Identifier Assignment, P37 assigned to E42 Identifier.\nIt is also a shortcut for the path from E1 CRM Entity through P1 is identified by, E41 Appellation, P139 has alternative form to E41 Appellation." + }, + "attributes" : [ "object", "external" ], + "id" : "225" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P121_overlaps_with", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "100", + "label" : { + "de" : "überlappt mit", + "IRI-based" : "P121_overlaps_with", + "ru" : "пересекается с", + "pt" : "sobrepõe com", + "el" : "επικαλύπτεται με", + "en" : "overlaps with", + "fr" : "chevauche", + "zh" : "重叠于" + }, + "domain" : "100", + "comment" : { + "en" : "This symmetric property associates an instance of E53 Place with another instance of E53 Place geometrically overlapping it.\nIt does not specify anything about the shared area. This property is purely spatial. It does not imply that phenomena that define, by their extent, places related by P121 overlaps with have ever covered a common area at the same time or even coexisted. In contrast, spatiotemporal overlaps described by P132 spatiotemporally overlaps are the total of areas simultaneously covered by the related spacetime volumes.\nThis property is symmetric. This property is reflexive." + }, + "attributes" : [ "object", "external" ], + "id" : "533" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P69i_is_associated_with", + "inverse" : "334", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "31", + "label" : { + "IRI-based" : "P69i_is_associated_with", + "en" : "is associated with" + }, + "domain" : "31", + "attributes" : [ "object", "external" ], + "id" : "534" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P198i_is_held_or_supported_by", + "inverse" : "536", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "11", + "label" : { + "IRI-based" : "P198i_is_held_or_supported_by", + "en" : "is held or supported by" + }, + "domain" : "11", + "attributes" : [ "object", "external" ], + "id" : "535" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P56i_is_found_on", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "134", + "label" : { + "de" : "wird gefunden auf", + "IRI-based" : "P56i_is_found_on", + "ru" : "найден на", + "pt" : "é encontrada em", + "el" : "βρίσκεται σε", + "en" : "is found on", + "fr" : "se trouve sur", + "zh" : "发现于" + }, + "superproperty" : [ "289" ], + "domain" : "281", + "subproperty" : [ "418", "354" ], + "attributes" : [ "object", "external" ], + "id" : "356" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P104i_applies_to", + "inverse" : "357", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "88", + "label" : { + "de" : "findet Anwendung auf", + "IRI-based" : "P104i_applies_to", + "ru" : "применяется к", + "pt" : "se aplicam à", + "el" : "ισχύει για", + "en" : "applies to", + "fr" : "s’applique à", + "zh" : "适用于" + }, + "domain" : "5", + "attributes" : [ "object", "external" ], + "id" : "537" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P150i_defines_typical_wholes_for", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "108", + "label" : { + "IRI-based" : "P150i_defines_typical_wholes_for", + "en" : "defines typical wholes for" + }, + "domain" : "108", + "attributes" : [ "object", "external" ], + "id" : "215" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P113i_was_removed_by", + "inverse" : "538", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "10", + "label" : { + "de" : "wurde entfernt durch", + "IRI-based" : "P113i_was_removed_by", + "ru" : "был удален посредством", + "pt" : "foi removido por", + "el" : "αφαιρέθηκε από", + "en" : "was removed by", + "fr" : "a été enlevée par", + "zh" : "被去除" + }, + "superproperty" : [ "196" ], + "domain" : "11", + "attributes" : [ "object", "external" ], + "id" : "414" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P23i_surrendered_title_through", + "inverse" : "253", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "60", + "label" : { + "de" : "trat Besitztitel ab in", + "IRI-based" : "P23i_surrendered_title_through", + "ru" : "право собственности отдано через", + "pt" : "perdeu os direitos de propriedade por meio da", + "el" : "παρέδωσε τον τίτλο μέσω", + "en" : "surrendered title through", + "fr" : "a perdu le droit de propriété du fait de", + "zh" : "出让所有权" + }, + "superproperty" : [ "149" ], + "domain" : "78", + "attributes" : [ "object", "external" ], + "id" : "539" + }, { + "iri" : "http://w3id.org/vir#K35_assigned_similarity_to", + "baseIri" : "http://w3id.org/vir", + "range" : "132", + "label" : { + "IRI-based" : "K35_assigned_similarity_to" + }, + "superproperty" : [ "359" ], + "domain" : "25", + "comment" : { + "undefined" : "The property document the assignment of the status of visual similarity to a symbolic object" + }, + "attributes" : [ "object" ], + "id" : "516" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P67i_is_referred_to_by", + "inverse" : "431", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "3", + "label" : { + "de" : "wird angeführt von", + "IRI-based" : "P67i_is_referred_to_by", + "ru" : "имеет ссылку на себя от", + "pt" : "é referenciado por", + "el" : "αναφέρεται από", + "en" : "is referred to by", + "fr" : "est référencé par", + "zh" : "被涉及" + }, + "domain" : "40", + "subproperty" : [ "369", "91", "127", "96", "308", "540" ], + "attributes" : [ "object", "external" ], + "id" : "93" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P136i_supported_type_creation", + "inverse" : "541", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "311", + "label" : { + "de" : "belegte", + "IRI-based" : "P136i_supported_type_creation", + "ru" : "поддержал создание типа", + "pt" : "suportou a criação de tipo", + "el" : "υποστήριξε τη δημιουργία τύπου", + "en" : "supported type creation", + "fr" : "a justifié la création de type", + "zh" : "支持类型创建" + }, + "superproperty" : [ "136" ], + "domain" : "40", + "attributes" : [ "object", "external" ], + "id" : "138" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P176i_starts_after_the_start_of", + "inverse" : "314", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "116", + "label" : { + "IRI-based" : "P176i_starts_after_the_start_of", + "en" : "starts after the start of" + }, + "superproperty" : [ "389" ], + "domain" : "116", + "subproperty" : [ "47", "244" ], + "attributes" : [ "object", "external" ], + "id" : "48" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P81_ongoing_throughout", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "345", + "label" : { + "de" : "andauernd während", + "IRI-based" : "P81_ongoing_throughout", + "ru" : "длится в течение", + "pt" : "abrange no mínimo", + "el" : "καθόλη τη διάρκεια του/της", + "en" : "ongoing throughout", + "fr" : "couvre au moins", + "zh" : "最短范围是" + }, + "domain" : "82", + "comment" : { + "en" : "This property associates an instance of E52 Time-Span with an instance of E61 Time Primitive specifying a minimum period of time covered by it. Since Time-Spans may not have precisely known temporal extents, the CIDOC CRM supports statements about the minimum and maximum temporal extents of Time-Spans. This property allows a Time-Span’s minimum temporal extent (i.e., its inner boundary) to be assigned an E61 Time Primitive value. Time Primitives are treated by the CIDOC CRM as application or system specific date intervals, and are not further analysed. If different sources of evidence justify different minimum extents without contradicting each other, the smallest interval including all these extents will be the best estimate. This should be taken into account for information integration." + }, + "attributes" : [ "datatype", "external" ], + "id" : "542" + }, { + "iri" : "http://w3id.org/vir#K23_connote", + "baseIri" : "http://w3id.org/vir", + "range" : "126", + "label" : { + "IRI-based" : "K23_connote", + "undefined" : "connote" + }, + "superproperty" : [ "374" ], + "domain" : "126", + "comment" : { + "undefined" : "This property indicates the connotation relationships, formalised by Barthes, between a conceptual entity and an iconographical object. It is a shortcut for the more fully developed path IC12 Visual Recognition assign (K9) to a IC9 Representation a new (K11) IC9 Representation. It doesn’t offer any information about when and whom established the connotation relationship" + }, + "attributes" : [ "object" ], + "id" : "436" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P160i_is_temporal_projection_of", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "249", + "label" : { + "IRI-based" : "P160i_is_temporal_projection_of", + "en" : "is temporal projection of" + }, + "domain" : "82", + "subproperty" : [ "501" ], + "attributes" : [ "object", "external" ], + "id" : "507" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P189_approximates", + "inverse" : "263", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "100", + "label" : { + "IRI-based" : "P189_approximates", + "en" : "approximates" + }, + "domain" : "100", + "comment" : { + "en" : "This property associates an instance of E53 Place with another instance of E53 Place, which is defined in the same reference space, and which is used to approximate the former. The property does not necessarily state the quality or accuracy of this approximation, but rather indicates the use of the first instance of place to approximate the second.\nIn common documentation practice, find or encounter spots e.g., in archaeology, botany or zoology are often related to the closest village, river or other named place without detailing the relation, e.g., if it is located within the village or in a certain distance of the specified place. In this case the stated “phenomenal” place found in the documentation can be seen as approximation of the actual encounter spot without more specific knowledge.\nIn more recent documentation often point coordinate information is provided that originates from GPS measurements or georeferencing from a map. This point coordinate information does not state the actual place of the encounter spot but tries to approximate it with a “declarative” place. The accuracy depends on the methodology used when creating the coordinates. It may be dependent on technical limitations like GPS accuracy but also on the method where the GPS location is taken in relation to the measured feature. If the methodology is known a maximum deviation from the measured point can be calculated and the encounter spot or feature may be related to the resulting circle using an instance of P171 at some place within.\nThis property is not transitive. This property is reflexive." + }, + "attributes" : [ "object", "external" ], + "id" : "543" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P67_refers_to", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "40", + "label" : { + "de" : "verweist auf", + "IRI-based" : "P67_refers_to", + "ru" : "ссылается на", + "pt" : "referencia", + "el" : "αναφέρεται σε", + "en" : "refers to", + "fr" : "fait référence à", + "zh" : "涉及" + }, + "domain" : "3", + "subproperty" : [ "309", "544", "98", "374", "92", "545" ], + "comment" : { + "en" : "This property documents that an instance of E89 Propositional Object makes a statement about an instance of E1 CRM Entity. P67 refers to (is referred to by) has the P67.1 has type link to an instance of E55 Type. This is intended to allow a more detailed description of the type of reference. This differs from P129 is about (is subject of), which describes the primary subject or subjects of the instance of E89 Propositional Object." + }, + "attributes" : [ "object", "external" ], + "id" : "431" + }, { + "iri" : "http://w3id.org/vir#K15_use_feature", + "baseIri" : "http://w3id.org/vir", + "range" : "30", + "label" : { + "IRI-based" : "K15_use_feature", + "undefined" : "use feature" + }, + "superproperty" : [ "129" ], + "domain" : "1", + "comment" : { + "undefined" : "The property indicates the specific attribute used during the production of a visual object" + }, + "attributes" : [ "object" ], + "id" : "177" + }, { + "iri" : "http://w3id.org/vir#K34_illustrate", + "baseIri" : "http://w3id.org/vir", + "range" : "6", + "label" : { + "IRI-based" : "K34_illustrate", + "undefined" : "illustrate" + }, + "superproperty" : [ "374" ], + "domain" : "126", + "comment" : { + "undefined" : "This property associate an information object to a iconographical representation" + }, + "attributes" : [ "object" ], + "id" : "434" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P55i_currently_holds", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "134", + "label" : { + "de" : "hält derzeitig", + "IRI-based" : "P55i_currently_holds", + "ru" : "в данный момент содержит", + "pt" : "é localização atual de", + "el" : "είναι θέση του", + "en" : "currently holds", + "fr" : "est localisation actuelle de", + "zh" : "当前拥有" + }, + "superproperty" : [ "509" ], + "domain" : "100", + "attributes" : [ "object", "external" ], + "id" : "170" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P137_exemplifies", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "108", + "label" : { + "de" : "erläutert", + "IRI-based" : "P137_exemplifies", + "ru" : "поясняет", + "pt" : "é exemplificado por", + "el" : "δειγματίζει", + "en" : "exemplifies", + "fr" : "exemplifie", + "zh" : "例示" + }, + "superproperty" : [ "438" ], + "domain" : "40", + "subproperty" : [ "107" ], + "comment" : { + "en" : "This property associates an instance of E1 CRM Entity with an instance of E55 Type for which it has been declared to be a particularly characteristic example.\nThe P137.1 in the taxonomic role property of P137 exemplifies (is exemplified by) allows differentiation of taxonomic roles. The taxonomic role renders the specific relationship of this example to the type, such as \"prototypical\", \"archetypical\", \"lectotype\", etc. The taxonomic role \"lectotype\" is not associated with the instance of E83 Type Creation itself but is selected in a later phase." + }, + "attributes" : [ "object", "external" ], + "id" : "109" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P59i_is_located_on_or_within", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "11", + "label" : { + "de" : "befindet sich auf oder in", + "IRI-based" : "P59i_is_located_on_or_within", + "ru" : "находится на или внутри", + "pt" : "está localizada sobre ou dentro de", + "el" : "βρίσκεται σε ή εντός", + "en" : "is located on or within", + "fr" : "se situe sur ou dans", + "zh" : "位于" + }, + "superproperty" : [ "188" ], + "domain" : "100", + "attributes" : [ "object", "external" ], + "id" : "191" + }, { + "iri" : "http://w3id.org/vir#K9_Assigned_status_to", + "baseIri" : "http://w3id.org/vir", + "range" : "11", + "label" : { + "IRI-based" : "K9_Assigned_status_to", + "undefined" : "Assigned status to" + }, + "superproperty" : [ "359" ], + "domain" : "28", + "comment" : { + "undefined" : "The property documents the assignment of status to a specific physical thing" + }, + "attributes" : [ "object" ], + "id" : "515" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P54i_is_current_permanent_location_of", + "inverse" : "547", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "134", + "label" : { + "de" : "ist derzeitiger permanenter Standort von", + "IRI-based" : "P54i_is_current_permanent_location_of", + "ru" : "является текущим постоянным местоположением для", + "pt" : "é localização permanente de", + "el" : "είναι μόνιμη θέση του/της", + "en" : "is current permanent location of", + "fr" : "est actuellement localisation à demeure de", + "zh" : "是当前永久位置" + }, + "domain" : "100", + "attributes" : [ "object", "external" ], + "id" : "546" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P107_has_current_or_former_member", + "inverse" : "549", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "78", + "label" : { + "de" : "hat derzeitiges oder früheres Mitglied", + "IRI-based" : "P107_has_current_or_former_member", + "ru" : "имеет действующего или бывшего члена", + "pt" : "tem ou teve membro", + "el" : "έχει ή είχε μέλος", + "en" : "has current or former member", + "fr" : "a pour membre actuel ou ancien", + "zh" : "有当前或以往成员" + }, + "domain" : "20", + "comment" : { + "en" : "This property associates an instance of E74 Group with an instance of E39 Actor that is or has been a member thereof.\nInstances of E74 Group and E21 Person may all be members of instances of E74 Group. An instance of E74 Group may be founded initially without any member.\nThis property is a shortcut of the more fully developed path from E74 Group, P144i gained member by, E85 Joining, P143 joined to E39 Actor.\nThe property P107.1 kind of member can be used to specify the type of membership or the role the member has in the group." + }, + "attributes" : [ "object", "external" ], + "id" : "548" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P182_ends_before_or_with_the_start_of", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "116", + "label" : { + "IRI-based" : "P182_ends_before_or_with_the_start_of", + "en" : "ends before or with the start of" + }, + "superproperty" : [ "314", "143" ], + "domain" : "116", + "subproperty" : [ "550" ], + "comment" : { + "en" : "This property specifies that the temporal extent of the domain instance A of E2 Temporal Entity ends before or simultaneously with the start of the temporal extent of the range instance B of E2 Temporal Entity.\nIn other words, if A = [A-start, A-end] and B = [B-start, B-end], we mean A-end ≤ B-start is true.\nThis property is part of the set of temporal primitives P173 – P176, P182 – P185.\nThis property corresponds to a disjunction (logical OR) of the following Allen temporal relations (Allen, 1983): {before, meets}.\nThis property is transitive. This property is asymmetric.\n\nFigure 16: Temporal entity A ends before or with the start of temporal entity B. Here A is longer than B\n\nFigure 17: Temporal entity A ends before or with the start of temporal entity B. Here A is shorter than B" + }, + "attributes" : [ "object", "external" ], + "id" : "245" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P196_defines", + "inverse" : "490", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "249", + "label" : { + "IRI-based" : "P196_defines", + "en" : "defines" + }, + "domain" : "11", + "comment" : { + "en" : "This property associates an instance of E18 Physical Thing with the instance of E92 Spacetime Volume that constitutes the complete trajectory of its geometric extent through spacetime for the whole time of the existence of the instance of E18 Physical Thing.\nAn instance of E18 Physical Thing not only occupies a particular geometric space at each instant of its existence, but in the course of its existence it also forms a trajectory through spacetime, which occupies a real, that is phenomenal, volume in spacetime, i.e., the instance of E92 Spacetime Volume this property associates it with. This real spatiotemporal extent of the instance of E18 Physical Thing is regarded as being unique, in all its details and fuzziness; the identity and existence of the E92 Spacetime Volume depends uniquely on the identity of the instance of E18 Physical Thing, whose existence defines it. It constitutes a phenomenal spacetime volume as defined in CRMgeo (Doerr & Hiebel, 2013).\nIncluded in this spacetime volume are both the spaces filled by the matter of the physical thing and any inner space that may exist, for instance the interior of a box. Physical things consisting of aggregations of physically unconnected objects, such as a set of chessmen, occupy a finite number of individually contiguous subsets of this spacetime volume equal to the number of objects that constitute the set and that are never connected during its existence." + }, + "attributes" : [ "object", "external" ], + "id" : "551" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P31i_was_modified_by", + "inverse" : "13", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "267", + "label" : { + "de" : "wurde verändert durch", + "IRI-based" : "P31i_was_modified_by", + "ru" : "был изменен посредством", + "pt" : "foi modificada por", + "el" : "τροποποιήθηκε από", + "en" : "was modified by", + "fr" : "a été modifié par", + "zh" : "被更改" + }, + "superproperty" : [ "196" ], + "domain" : "11", + "subproperty" : [ "192", "12", "282" ], + "attributes" : [ "object", "external" ], + "id" : "195" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P24_transferred_title_of", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "11", + "label" : { + "de" : "übertrug Besitz über", + "IRI-based" : "P24_transferred_title_of", + "ru" : "передал право собственности на", + "pt" : "transferiu os direitos de propriedade sobre o", + "el" : "μετεβίβασε τον τίτλο του/της", + "en" : "transferred title of", + "fr" : "a fait passer le droit de propriété sur", + "zh" : "转移所有权的是" + }, + "domain" : "60", + "comment" : { + "en" : "This property identifies the instance(s) of E18 Physical Thing involved in an instance of E8 Acquisition.\nIn reality, an acquisition must refer to at least one transferred item." + }, + "attributes" : [ "object", "external" ], + "id" : "61" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P49_has_former_or_current_keeper", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "78", + "label" : { + "de" : "hat früheren oder derzeitigen Betreuer", + "IRI-based" : "P49_has_former_or_current_keeper", + "ru" : "имеет бывшего или текущего смотрителя", + "pt" : "é ou foi guardada por", + "el" : "είναι ή ήταν στην κατοχή του", + "en" : "has former or current keeper", + "fr" : "est ou a été détenu par", + "zh" : "有以往或当前保管者" + }, + "domain" : "11", + "subproperty" : [ "205", "522" ], + "comment" : { + "en" : "This property identifies the instance of E39 Actor who has or has had custody of an instance of E18 Physical Thing at some time. This property leaves open the question if parts of this physical thing have been added or removed during the time-spans it has been under the custody of this actor, but it is required that at least a part which can unambiguously be identified as representing the whole has been under this custody for its whole time. The way, in which a representative part is defined, should ensure that it is unambiguous who keeps a part and who the whole and should be consistent with the identity criteria of the kept instance of E18 Physical Thing.\nThe distinction with P50 has current keeper (is current keeper of) is that P49 has former or current keeper (is former or current keeper of) leaves open the question as to whether the specified keepers are current.\nThis property is a shortcut for the more detailed path from E18 Physical Thing through P30i custody transferred through, E10 Transfer of Custody, P28 custody surrendered by or P29 custody received by to E39 Actor." + }, + "attributes" : [ "object", "external" ], + "id" : "166" + }, { + "iri" : "http://w3id.org/vir#K20_forms_part_of", + "baseIri" : "http://w3id.org/vir", + "range" : "126", + "label" : { + "IRI-based" : "K20_forms_part_of", + "undefined" : "forms part of" + }, + "superproperty" : [ "54" ], + "domain" : "126", + "comment" : { + "undefined" : "This property put in relation a representation with a part of itself." + }, + "attributes" : [ "object" ], + "id" : "530" + }, { + "iri" : "http://w3id.org/vir#K25i_is_abstraction_of", + "baseIri" : "http://w3id.org/vir", + "range" : "30", + "label" : { + "IRI-based" : "K25i_is_abstraction_of", + "undefined" : "is abstraction of" + }, + "superproperty" : [ "127" ], + "domain" : "132", + "comment" : { + "undefined" : "This property put in relation a symbolic object with a personification in a work of art." + }, + "attributes" : [ "object" ], + "id" : "376" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P86i_contains", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "82", + "label" : { + "de" : "enthält", + "IRI-based" : "P86i_contains", + "ru" : "содержит", + "pt" : "contém", + "el" : "περιέχει", + "en" : "contains", + "fr" : "inclut", + "zh" : "包含" + }, + "domain" : "82", + "attributes" : [ "object", "external" ], + "id" : "293" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P113_removed", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "11", + "label" : { + "de" : "entfernte", + "IRI-based" : "P113_removed", + "ru" : "удален", + "pt" : "removeu", + "el" : "αφαίρεσε", + "en" : "removed", + "fr" : "a enlevé", + "zh" : "去除了" + }, + "superproperty" : [ "187" ], + "domain" : "10", + "comment" : { + "en" : "This property identifies the instance of E18 Physical Thing that is removed during an instance of E80 Part Removal activity." + }, + "attributes" : [ "object", "external" ], + "id" : "538" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P168_place_is_defined_by", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "553", + "label" : { + "IRI-based" : "P168_place_is_defined_by", + "en" : "place is defined by" + }, + "domain" : "100", + "comment" : { + "en" : "This property associates an instance of E53 Place with an instance of E94 Space Primitive that defines it. Syntactic variants or use of different scripts may result in multiple instances of E94 Space Primitive defining exactly the same place. Transformations between different reference systems always result in new definitions of places approximating each other and not in alternative definitions." + }, + "attributes" : [ "datatype", "external" ], + "id" : "552" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P48i_is_preferred_identifier_of", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "40", + "label" : { + "de" : "ist bevorzugtes Kennzeichen für", + "IRI-based" : "P48i_is_preferred_identifier_of", + "ru" : "является предпочтительным идентификатором для", + "pt" : "é o identificador preferido de", + "el" : "είναι προτιμώμενο αναγνωριστικό", + "en" : "is preferred identifier of", + "fr" : "est l’identificateur retenu de", + "zh" : "是优选标识符" + }, + "superproperty" : [ "381" ], + "domain" : "157", + "attributes" : [ "object", "external" ], + "id" : "224" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P17i_motivated", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "45", + "label" : { + "de" : "regte an", + "IRI-based" : "P17i_motivated", + "ru" : "обусловил", + "pt" : "motivou", + "el" : "ήταν αφορμή", + "en" : "motivated", + "fr" : "a motivé", + "zh" : "促动" + }, + "superproperty" : [ "136" ], + "domain" : "40", + "attributes" : [ "object", "external" ], + "id" : "139" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P76i_provides_access_to", + "inverse" : "440", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "78", + "label" : { + "de" : "bietet Zugang zu", + "IRI-based" : "P76i_provides_access_to", + "ru" : "предоставляет доступ к", + "pt" : "é ponto de contado de", + "el" : "παρέχει πρόσβαση σε", + "en" : "provides access to", + "fr" : "permettent de contacter", + "zh" : "提供访问" + }, + "domain" : "183", + "attributes" : [ "object", "external" ], + "id" : "554" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P185_ends_before_the_end_of", + "inverse" : "246", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "116", + "label" : { + "IRI-based" : "P185_ends_before_the_end_of", + "en" : "ends before the end of" + }, + "superproperty" : [ "140" ], + "domain" : "116", + "subproperty" : [ "245" ], + "comment" : { + "en" : "This property specifies that the temporal extent of the domain instance A of E2 Temporal Entity ends definitely before the end of the temporal extent of the range instance B of E2 Temporal Entity.\nIn other words, if A = [A-start, A-end] and B = [B-start, B-end], we mean A-end < B-end is true.\nThis property is part of the set of temporal primitives P173 – P176, P182 – P185.\nThis property corresponds to a disjunction (logical OR) of the following Allen temporal relations (Allen, 1983): {before, meets, overlaps, starts, during}.\nThis property is transitive. This property is asymmetric.\n\nFigure 22: Temporal entity A ends before the end of temporal entity B. Here A is longer than B\n\nFigure 23: Temporal entity A ends before the end of temporal entity B. Here A is shorter than B" + }, + "attributes" : [ "object", "external" ], + "id" : "143" + }, { + "iri" : "http://w3id.org/vir#K4_is_visual_prototype_of", + "baseIri" : "http://w3id.org/vir", + "range" : "126", + "label" : { + "IRI-based" : "K4_is_visual_prototype_of", + "undefined" : "is visual prototype of" + }, + "superproperty" : [ "431" ], + "domain" : "126", + "comment" : { + "undefined" : "The property documents the use of a specific prototypical example for an image. The nature of the relationships helps define a map of relationships between prototypical items used in the arts." + }, + "attributes" : [ "object" ], + "id" : "545" + }, { + "iri" : "http://w3id.org/vir#K4_1_prototypical_model", + "baseIri" : "http://w3id.org/vir", + "range" : "108", + "label" : { + "IRI-based" : "K4_1_prototypical_model" + }, + "domain" : "67", + "attributes" : [ "object" ], + "id" : "555" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P141i_was_assigned_by", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "233", + "label" : { + "de" : "wurde zugewiesen durch", + "IRI-based" : "P141i_was_assigned_by", + "ru" : "был присвоен посредством", + "pt" : "foi atribuído por", + "el" : "αποδόθηκε από", + "en" : "was assigned by", + "fr" : "a été attribué par", + "zh" : "被分配" + }, + "domain" : "40", + "subproperty" : [ "503", "519", "252", "556", "274", "408" ], + "attributes" : [ "object", "external" ], + "id" : "234" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P75_possesses", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "5", + "label" : { + "de" : "besitzt", + "IRI-based" : "P75_possesses", + "ru" : "владеет", + "pt" : "é detentor de", + "el" : "κατέχει", + "en" : "possesses", + "fr" : "est détenteur de", + "zh" : "拥有" + }, + "domain" : "78", + "comment" : { + "en" : "This property associates an instance of E39 Actor to an instance of E30 Right over which the actor holds or has held a legal claim." + }, + "attributes" : [ "object", "external" ], + "id" : "218" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P2i_is_type_of", + "inverse" : "438", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "40", + "label" : { + "de" : "ist Typus von", + "IRI-based" : "P2i_is_type_of", + "ru" : "является типом для", + "pt" : "é o tipo de", + "el" : "είναι ο τύπος του/της", + "en" : "is type of", + "fr" : "est le type de", + "zh" : "是类型" + }, + "domain" : "108", + "subproperty" : [ "482", "498" ], + "attributes" : [ "object", "external" ], + "id" : "483" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P13_destroyed", + "inverse" : "317", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "11", + "label" : { + "de" : "zerstörte", + "IRI-based" : "P13_destroyed", + "ru" : "уничтожил", + "pt" : "destruiu", + "el" : "κατέστρεψε", + "en" : "destroyed", + "fr" : "a détruit", + "zh" : "破坏了" + }, + "superproperty" : [ "23" ], + "domain" : "73", + "comment" : { + "en" : "This property links an instance of E6 Destruction to an instance of E18 Physical Thing that has been destroyed by it.\nDestruction implies the end of an item’s life as a subject of cultural documentation – the physical matter of which the item was composed may in fact continue to exist. An instance of E6 Destruction may be contiguous with an instance of E12 Production that brings into existence a derived object composed partly of matter from the destroyed object." + }, + "attributes" : [ "object", "external" ], + "id" : "526" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P130i_features_are_also_found_on", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "89", + "label" : { + "de" : "Merkmale auch auf", + "IRI-based" : "P130i_features_are_also_found_on", + "ru" : "признаки также найдены на", + "pt" : "características são também encontradas em", + "el" : "χαρακτηριστικά του βρίσκονται επίσης σε", + "en" : "features are also found on", + "fr" : "a des caractéristiques se trouvant aussi sur", + "zh" : "发现特征" + }, + "domain" : "89", + "subproperty" : [ "145", "411" ], + "attributes" : [ "object", "external" ], + "id" : "150" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P80_end_is_qualified_by", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "348", + "label" : { + "de" : "hat Begründung des Endes", + "IRI-based" : "P80_end_is_qualified_by", + "ru" : "конец ограничен", + "pt" : "final é qualificado por", + "el" : "τέλος προσδιορίζεται από", + "en" : "end is qualified by", + "fr" : "fin est qualifiée par", + "zh" : "结束限定" + }, + "domain" : "82", + "comment" : { + "en" : "This property associates an instance of E52 Time-Span with a note detailing the scholarly or scientific opinions and justifications about the end of this time-span concerning certainty, precision, sources etc. This property may also be used to describe arguments constraining possible dates and to distinguish reasons for alternative dates." + }, + "attributes" : [ "datatype", "external" ], + "id" : "557" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P13i_was_destroyed_by", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "73", + "label" : { + "de" : "wurde zerstört durch", + "IRI-based" : "P13i_was_destroyed_by", + "ru" : "был уничтожен посредством", + "pt" : "foi destruído por", + "el" : "καταστράφηκε από", + "en" : "was destroyed by", + "fr" : "a été détruite par", + "zh" : "被破坏" + }, + "superproperty" : [ "216" ], + "domain" : "11", + "attributes" : [ "object", "external" ], + "id" : "317" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P3_has_note", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "559", + "label" : { + "de" : "hat Anmerkung", + "IRI-based" : "P3_has_note", + "ru" : "имеет примечание", + "pt" : "tem nota", + "el" : "έχει επεξήγηση", + "en" : "has note", + "fr" : "a pour note", + "zh" : "有注释" + }, + "domain" : "40", + "comment" : { + "en" : "This property is a container for all informal descriptions about an object that have not been expressed in terms of CIDOC CRM constructs.\nIn particular, it captures the characterisation of the item itself, its internal structures, appearance etc.\nLike property P2 has type (is type of), this property is a consequence of the restricted focus of the CIDOC CRM. The aim is not to capture, in a structured form, everything that can be said about an item; indeed, the CIDOC CRM formalism is not regarded as sufficient to express everything that can be said. Good practice requires use of distinct note fields for different aspects of a characterisation. The P3.1 has type property of P3 has note allows differentiation of specific notes, e.g., “construction”, “decoration” etc.\nAn item may have many notes, but a note is attached to a specific item." + }, + "attributes" : [ "datatype", "external" ], + "id" : "558" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P27_moved_from", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "100", + "label" : { + "de" : "bewegte weg von", + "IRI-based" : "P27_moved_from", + "ru" : "перемещен из", + "pt" : "locomoveu de", + "el" : "μετακινήθηκε από", + "en" : "moved from", + "fr" : "a retiré de", + "zh" : "移自" + }, + "domain" : "160", + "comment" : { + "en" : "This property identifies an origin, an instance of E53 Place, of an instance of E9 Move.\nA move will be linked to an origin, such as the move of an artifact from storage to display. A move may be linked to many starting instances of E53 Place by multiple instances of this property. In this case the move describes the picking up of a set of objects. The area of the move includes the origin(s), route and destination(s).\nTherefore, the described origin is an instance of E53 Place which P89 falls within (contains) the instance of E53 Place the move P7 took place at." + }, + "attributes" : [ "object", "external" ], + "id" : "161" + }, { + "iri" : "http://w3id.org/vir#K11i_was_assigned_by", + "baseIri" : "http://w3id.org/vir", + "range" : "28", + "label" : { + "IRI-based" : "K11i_was_assigned_by", + "undefined" : "was assigned by" + }, + "superproperty" : [ "234" ], + "domain" : "133", + "comment" : { + "undefined" : "The property indicates the status assigned during the visual recognition event" + }, + "attributes" : [ "object" ], + "id" : "556" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P72_has_language", + "inverse" : "561", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "117", + "label" : { + "de" : "hat Sprache", + "IRI-based" : "P72_has_language", + "ru" : "имеет язык", + "pt" : "é da língua", + "el" : "έχει γλώσσα", + "en" : "has language", + "fr" : "est en langue", + "zh" : "有语种" + }, + "domain" : "33", + "comment" : { + "en" : "This property associates an instance(s) of E33 Linguistic Object with an instance of E56 Language in which it is, at least partially, expressed.\nLinguistic Objects are composed in one or more human Languages. This property allows these languages to be documented." + }, + "attributes" : [ "object", "external" ], + "id" : "560" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P144i_gained_member_by", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "77", + "label" : { + "de" : "erwarb Mitglied durch", + "IRI-based" : "P144i_gained_member_by", + "en" : "gained member by", + "zh" : "获得成员" + }, + "superproperty" : [ "199" ], + "domain" : "20", + "attributes" : [ "object", "external" ], + "id" : "284" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P8_took_place_on_or_within", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "11", + "label" : { + "de" : "fand statt auf oder innerhalb von", + "IRI-based" : "P8_took_place_on_or_within", + "ru" : "имел место на или в", + "pt" : "ocorreu em ou dentro", + "el" : "έλαβε χώρα σε ή εντός", + "en" : "took place on or within", + "fr" : "a eu lieu sur ou dans", + "zh" : "发生的所在对象是" + }, + "domain" : "231", + "comment" : { + "en" : "This property describes the location of an instance of E4 Period with respect to an instance of E19 Physical Object.\nThis property is a shortcut of the more fully developed path from E4 Period through P7 took place at, E53 Place, P156i is occupied by E18 Physical Thing.\nIt describes a period that can be located with respect to the space defined by an E19 Physical Object such as a ship or a building. The precise geographical location of the object during the period in question may be unknown or unimportant.\nFor example, the French and German armistice of 22-nd June 1940 was signed in the same railway carriage as the armistice of 11-th November 1918." + }, + "attributes" : [ "object", "external" ], + "id" : "232" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P102_has_title", + "inverse" : "380", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "265", + "label" : { + "de" : "trägt den Titel", + "IRI-based" : "P102_has_title", + "ru" : "имеет заголовок", + "pt" : "tem título", + "el" : "έχει τίτλο", + "en" : "has title", + "fr" : "a pour titre", + "zh" : "有题名" + }, + "superproperty" : [ "225" ], + "domain" : "44", + "comment" : { + "en" : "This property associates an instance of E35 Title has been applied to an instance of E71 Human-Made Thing.\nThe P102.1 has type property of the P102 has title (is title of) property enables the relationship between the title and the thing to be further clarified, for example, if the title was a given title, a supplied title etc.\nIt allows any human-made material or immaterial thing to be given a title. It is possible to imagine a title being created without a specific object in mind." + }, + "attributes" : [ "object", "external" ], + "id" : "532" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P11i_participated_in", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "198", + "label" : { + "de" : "nahm Teil an", + "IRI-based" : "P11i_participated_in", + "ru" : "участвовал в", + "pt" : "participa em", + "el" : "συμμετείχε σε", + "en" : "participated in", + "fr" : "a participé à", + "zh" : "参与" + }, + "superproperty" : [ "196" ], + "domain" : "78", + "subproperty" : [ "149", "227", "79", "510", "21", "336", "531", "284" ], + "attributes" : [ "object", "external" ], + "id" : "199" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P15_was_influenced_by", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "40", + "label" : { + "de" : "wurde beeinflußt durch", + "IRI-based" : "P15_was_influenced_by", + "ru" : "находился под влиянием", + "pt" : "foi influenciado por", + "el" : "επηρεάστηκε από", + "en" : "was influenced by", + "fr" : "a été influencée par", + "zh" : "被影响" + }, + "domain" : "45", + "subproperty" : [ "541", "520", "47", "52" ], + "comment" : { + "en" : "This is a high-level property, which captures the relationship between an instance of E7 Activity and anything, that is, an instance of E1 CRM Entity that may have had some bearing upon it.\nThe property has more specific sub properties." + }, + "attributes" : [ "object", "external" ], + "id" : "49" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P51_has_former_or_current_owner", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "78", + "label" : { + "de" : "hat früheren oder derzeitigen Besitzer", + "IRI-based" : "P51_has_former_or_current_owner", + "ru" : "имеет бывшего или текущего владельца", + "pt" : "é ou foi propriedade de", + "el" : "έχει ή είχε ιδιοκτήτη", + "en" : "has former or current owner", + "fr" : "est ou a été possédée par", + "zh" : "有以往或当前所有者" + }, + "domain" : "11", + "subproperty" : [ "256" ], + "comment" : { + "en" : "This property identifies an instance of E39 Actor that is or had been the legal owner (i.e., title holder) of an instance of E18 Physical Thing at some time.\nThe distinction with P52 has current owner (is current owner of) is that P51 has former or current owner (is former or current owner of) does not indicate whether the specified owners are current.\nThis property is a shortcut for the more detailed path from E18 Physical Thing through P24i changed ownership through, E8 Acquisition, P23 transferred title from, or P22 transferred title to to E39 Actor." + }, + "attributes" : [ "object", "external" ], + "id" : "258" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P183_ends_before_the_start_of", + "inverse" : "247", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "116", + "label" : { + "IRI-based" : "P183_ends_before_the_start_of", + "en" : "ends before the start of" + }, + "superproperty" : [ "245" ], + "domain" : "116", + "comment" : { + "en" : "This property specifies that the temporal extent of the domain instance A of E2 Temporal Entity ends definitely before the start of the temporal extent of the range instance B of E2 Temporal Entity.\nIn other words, if A = [A-start, A-end] and B = [B-start, B-end], we mean A-end < B-start is true.\nThis property is part of the set of temporal primitives P173 – P176, P182 – P185.\nThis property corresponds to the following Allen temporal relation (Allen, 1983) : {before}.\nThis property is transitive. This property is asymmetric.\n\nFigure 18: Temporal entity A ends before the start of temporal entity B. Here A is longer than B\n\nFigure 19: Temporal entity A ends before the start of temporal entity B. Here A is shorter than B" + }, + "attributes" : [ "object", "external" ], + "id" : "550" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P96_by_mother", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "111", + "label" : { + "de" : "durch Mutter", + "IRI-based" : "P96_by_mother", + "ru" : "посредством матери", + "pt" : "pela mãe", + "el" : "είχε μητέρα", + "en" : "by mother", + "fr" : "de mère", + "zh" : "来自母亲" + }, + "superproperty" : [ "22" ], + "domain" : "15", + "comment" : { + "en" : "This property links an instance of E67 Birth to an instance of E21 Person in the role of birth-giving mother.\nNote that biological fathers are not necessarily participants in the Birth (see P97 from father (was father for)). The instance of E21 Person being born is linked to the instance of E67 Birth with the property P98 brought into life (was born). This is not intended for use with general natural history material, only people. There is no explicit method for modelling conception and gestation except by using extensions." + }, + "attributes" : [ "object", "external" ], + "id" : "201" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P34i_was_assessed_by", + "inverse" : "517", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "251", + "label" : { + "de" : "wurde beurteilt durch", + "IRI-based" : "P34i_was_assessed_by", + "ru" : "был оценен посредством", + "pt" : "foi avaliada por", + "el" : "εκτιμήθηκε από", + "en" : "was assessed by", + "fr" : "expertisé par le biais de", + "zh" : "被评估" + }, + "superproperty" : [ "462" ], + "domain" : "11", + "attributes" : [ "object", "external" ], + "id" : "465" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P71i_is_listed_in", + "inverse" : "544", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "219", + "label" : { + "de" : "wird aufgelistet in", + "IRI-based" : "P71i_is_listed_in", + "ru" : "перечислен в", + "pt" : "é definido por", + "el" : "περιλαμβάνεται σε", + "en" : "is listed in", + "fr" : "est défini par", + "zh" : "列于" + }, + "superproperty" : [ "93" ], + "domain" : "40", + "attributes" : [ "object", "external" ], + "id" : "540" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P185i_ends_after_the_end_of", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "116", + "label" : { + "IRI-based" : "P185i_ends_after_the_end_of", + "en" : "ends after the end of" + }, + "superproperty" : [ "141" ], + "domain" : "116", + "subproperty" : [ "244" ], + "attributes" : [ "object", "external" ], + "id" : "246" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P26i_was_destination_of", + "inverse" : "443", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "160", + "label" : { + "de" : "war Zielort von", + "IRI-based" : "P26i_was_destination_of", + "ru" : "был пунктом назначения для", + "pt" : "era destinação de", + "el" : "ήταν προορισμός του/της", + "en" : "was destination of", + "fr" : "a été la destination de", + "zh" : "是目的地" + }, + "domain" : "100", + "attributes" : [ "object", "external" ], + "id" : "562" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P111_added", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "11", + "label" : { + "de" : "fügte hinzu", + "IRI-based" : "P111_added", + "ru" : "добавил", + "pt" : "adicionou", + "el" : "προσέθεσε", + "en" : "added", + "fr" : "a ajouté", + "zh" : "增加了" + }, + "superproperty" : [ "52" ], + "domain" : "179", + "comment" : { + "en" : "This property identifies the instance of E18 Physical Thing that is added during an instance of E79 Part Addition activity." + }, + "attributes" : [ "object", "external" ], + "id" : "180" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P44i_is_condition_of", + "inverse" : "564", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "11", + "label" : { + "de" : "ist Zustand von", + "IRI-based" : "P44i_is_condition_of", + "ru" : "является условием для", + "pt" : "estado material de", + "el" : "είναι κατάσταση του", + "en" : "is condition of", + "fr" : "état matériel de", + "zh" : "是状况" + }, + "domain" : "115", + "attributes" : [ "object", "external" ], + "id" : "563" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P57_has_number_of_parts", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "566", + "label" : { + "de" : "hat Anzahl Teile", + "IRI-based" : "P57_has_number_of_parts", + "ru" : "имеет число частей", + "pt" : "tem número de partes", + "el" : "έχει αριθμό μερών", + "en" : "has number of parts", + "fr" : "a pour nombre de parties", + "zh" : "有组成部分数" + }, + "domain" : "134", + "comment" : { + "en" : "This property documents the number of parts, an instance of E60 Number, of which an instance of E19 Physical Object is composed.\nThis may be used as a method of checking inventory counts with regard to aggregate or collective objects. What constitutes a part or component depends on the context and requirements of the documentation. Normally, the parts documented in this way would not be considered as worthy of individual attention.\nFor a more complete description, objects may be decomposed into their components and constituents using P46 is composed of (forms parts of) and P45 consists of (is incorporated in). This allows each element to be described individually." + }, + "attributes" : [ "datatype", "external" ], + "id" : "565" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P72i_is_language_of", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "33", + "label" : { + "de" : "ist Sprache von", + "IRI-based" : "P72i_is_language_of", + "ru" : "является языком для", + "pt" : "é a língua de", + "el" : "είναι γλώσσα του/της", + "en" : "is language of", + "fr" : "est la langue de", + "zh" : "是语种" + }, + "domain" : "117", + "attributes" : [ "object", "external" ], + "id" : "561" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P34_concerned", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "11", + "label" : { + "de" : "betraf", + "IRI-based" : "P34_concerned", + "ru" : "имел дело с", + "pt" : "interessada", + "el" : "αφορούσε σε", + "en" : "concerned", + "fr" : "a concerné", + "zh" : "已评估" + }, + "superproperty" : [ "359" ], + "domain" : "251", + "comment" : { + "en" : "This property identifies the instance of E18 Physical Thing that was assessed during an instance of E14 Condition Assessment activity.\nConditions may be assessed either by direct observation or using recorded evidence. In the latter case the instance of E18 Physical Thing does not need to be present or extant at the time of assessment." + }, + "attributes" : [ "object", "external" ], + "id" : "517" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P110_augmented", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "11", + "label" : { + "de" : "erweiterte", + "IRI-based" : "P110_augmented", + "ru" : "увеличил", + "pt" : "aumentou", + "el" : "επαύξησε", + "en" : "augmented", + "fr" : "a augmenté", + "zh" : "增强了" + }, + "superproperty" : [ "13" ], + "domain" : "179", + "comment" : { + "en" : "This property identifies the instance of E24 Physical Human-Made Thing that is added to (augmented) in an instance of E79 Part Addition.\nAlthough an instance of E79 Part Addition event normally concerns only one instance of E24 Physical Human-Made Thing, it is possible to imagine circumstances under which more than one item might be added to (augmented). For example, the artist Jackson Pollock trailing paint onto multiple canvasses." + }, + "attributes" : [ "object", "external" ], + "id" : "283" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P41i_was_classified_by", + "inverse" : "400", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "401", + "label" : { + "de" : "wurde klassifiziert durch", + "IRI-based" : "P41i_was_classified_by", + "ru" : "был классифицирован посредством", + "pt" : "foi classificada por", + "el" : "χαρακτηρίσθηκε από", + "en" : "was classified by", + "fr" : "a été classifiée par le biais de", + "zh" : "被分类" + }, + "superproperty" : [ "462" ], + "domain" : "40", + "attributes" : [ "object", "external" ], + "id" : "464" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P197_covered_parts_of", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "100", + "label" : { + "IRI-based" : "P197_covered_parts_of", + "en" : "covered parts of" + }, + "domain" : "173", + "comment" : { + "en" : "This property associates an instance of E93 Presence with an instance of E53 Place that geometrically overlaps with the spatial projection of the respective instance of E93 Presence. A use case of this property is to state through which places an object or an instance of E21 Person has or was moved within a given time-span. It may also be used to describe a partial or complete, temporary or permanent extension of the spatial extent of some realm into a neighbouring region during a known time-span. It may also be used to describe a partial or complete, temporary or permanent extension of the spatial extent of some realm into a neighbouring region during a known time-span.\nThis property is a shortcut of the more fully developed path from E93 Presence through P161 has spatial projection, E53 Place, P121 overlaps with, to E53 Place." + }, + "attributes" : [ "object", "external" ], + "id" : "395" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P65_shows_visual_item", + "inverse" : "410", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "133", + "label" : { + "de" : "zeigt Bildliches", + "IRI-based" : "P65_shows_visual_item", + "ru" : "показывает визуальный предмет", + "pt" : "apresenta item visual", + "el" : "εμφανίζει οπτικό στοιχείο", + "en" : "shows visual item", + "fr" : "présente l'item visuel", + "zh" : "展示可视项" + }, + "superproperty" : [ "151" ], + "domain" : "41", + "subproperty" : [ "567", "372" ], + "comment" : { + "en" : "This property documents an instance of E36 Visual Item shown by an instance of E24 Physical Human-Made Thing.\nThis property is similar to P62 depicts (is depicted by) in that it associates an instance of E24 Physical Human-Made Thing with a visual representation. However, P65 shows visual item (is shown by) differs from the P62 depicts (is depicted by) property in that it makes no claims about what the instance of E36 Visual Item is deemed to represent. An instance of E36 Visual Item identifies a recognisable image or visual symbol, regardless of what this image may or may not represent.\nFor example, all recent British coins bear a portrait of Queen Elizabeth II, a fact that is correctly documented using P62 depicts (is depicted by). Different portraits have been used at different periods, however. P65 shows visual item (is shown by) can be used to refer to a particular portrait.\nP65 shows visual item (is shown by) may also be used for Visual Items such as signs, marks and symbols, for example the 'Maltese Cross' or the 'copyright symbol’ that have no particular representational content.\nThis property is part of the fully developed path E24 Physical Human-Made Thing, P65 shows visual item, E36 Visual Item, P138 represents to E1 CRM Entity which is shortcut by, P62 depicts (is depicted by)." + }, + "attributes" : [ "object", "external" ], + "id" : "373" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P44_has_condition", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "115", + "label" : { + "de" : "hat Zustand", + "IRI-based" : "P44_has_condition", + "ru" : "имеет условие", + "pt" : "tem estado material", + "el" : "έχει κατάσταση", + "en" : "has condition", + "fr" : "a pour état matériel", + "zh" : "有状况" + }, + "domain" : "11", + "comment" : { + "en" : "This property records an E3 Condition State for some E18 Physical Thing.\nThis property is a shortcut of the more fully developed path from E18 Physical Thing through P34i was assessed by, E14 Condition Assessment, P35 has identified to E3 Condition State. It offers no information about how and when the E3 Condition State was established, nor by whom.\nAn instance of Condition State is specific to an instance of E18 Physical Thing." + }, + "attributes" : [ "object", "external" ], + "id" : "564" + }, { + "iri" : "http://w3id.org/vir#K1i_is_denoted_by", + "baseIri" : "http://w3id.org/vir", + "range" : "11", + "label" : { + "IRI-based" : "K1i_is_denoted_by", + "undefined" : "is denoted by" + }, + "superproperty" : [ "410" ], + "domain" : "392", + "comment" : { + "undefined" : "The property documents the assignment of an iconographical object to a specific physical man-made object. It is a shortcut for the more fully developed path IC12 Visual Recognition assign (K9) to a E18 Physical Thing the status of (K11) IC9 Representation." + }, + "attributes" : [ "object" ], + "id" : "412" + }, { + "iri" : "http://w3id.org/vir#K35i_has_similarity_assigned_by", + "baseIri" : "http://w3id.org/vir", + "range" : "25", + "label" : { + "IRI-based" : "K35i_has_similarity_assigned_by" + }, + "superproperty" : [ "462" ], + "domain" : "132", + "comment" : { + "undefined" : "The property document the assignment of the status of similarity to a symbolic object" + }, + "attributes" : [ "object" ], + "id" : "467" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P136_was_based_on", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "40", + "label" : { + "de" : "stützte sich auf", + "IRI-based" : "P136_was_based_on", + "ru" : "был основан на", + "pt" : "foi baseado em", + "el" : "βασίστηκε σε", + "en" : "was based on", + "fr" : "s’est fondée sur", + "zh" : "基于" + }, + "superproperty" : [ "49" ], + "domain" : "311", + "comment" : { + "en" : "This property identifies one or more instances of E1 CRM Entity that were used as evidence to declare a new instance of E55 Type.\nThe examination of these items is often the only objective way to understand the precise characteristics of a new type. Such items should be deposited in a museum or similar institution for that reason. The taxonomic role renders the specific relationship of each item to the type, such as \"holotype\" or \"original element\"." + }, + "attributes" : [ "object", "external" ], + "id" : "541" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P188_requires_production_tool", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "134", + "label" : { + "IRI-based" : "P188_requires_production_tool", + "en" : "requires production tool" + }, + "domain" : "118", + "comment" : { + "en" : "This property associates an instance of E99 Product Type with an instance of E19 Physical Object that is needed for the production of an instance of E18 Physical Thing. When the process of production is correctly executed in accordance with the plan and using the specified instance of E19 Physical Object, the resulting instance of E18 Physical Thing is considered an exemplar of this instance of E99 Product Type. The instance of E19 Physical Object may bear distinct features that are transformed into characteristic features of the resulting instance of E18 Physical Thing. Examples include models and moulds." + }, + "attributes" : [ "object", "external" ], + "id" : "229" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P73_has_translation", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "33", + "label" : { + "de" : "hat Übersetzung", + "IRI-based" : "P73_has_translation", + "ru" : "имеет перевод", + "pt" : "tem tradução", + "el" : "έχει μετάφραση", + "en" : "has translation", + "fr" : "a pour traduction", + "zh" : "有译文" + }, + "superproperty" : [ "150" ], + "domain" : "33", + "comment" : { + "en" : "This property links an instance of E33 Linguistic Object (A), to another instance of E33 Linguistic Object (B) which is the translation of A.\nWhen an instance of E33 Linguistic Object is translated into a new language a new instance of E33 Linguistic Object is created, despite the translation being conceptually similar to the source.\nThis property is asymmetric." + }, + "attributes" : [ "object", "external" ], + "id" : "145" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P91_has_unit", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "35", + "label" : { + "de" : "hat Einheit", + "IRI-based" : "P91_has_unit", + "ru" : "имеет единицу", + "pt" : "tem unidade", + "el" : "έχει μονάδα μέτρησης", + "en" : "has unit", + "fr" : "a pour unité", + "zh" : "有单位" + }, + "domain" : "36", + "subproperty" : [ "496" ], + "comment" : { + "en" : "This property shows the type of unit an instance of E54 Dimension was expressed in." + }, + "attributes" : [ "object", "external" ], + "id" : "37" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P54_has_current_permanent_location", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "100", + "label" : { + "de" : "hat derzeitigen permanenten Standort", + "IRI-based" : "P54_has_current_permanent_location", + "ru" : "имеет текущее постоянное местоположение", + "pt" : "é localizado permanentemente em", + "el" : "έχει μόνιμη θέση", + "en" : "has current permanent location", + "fr" : "a actuellement pour localisation à demeure", + "zh" : "有当前永久位置" + }, + "domain" : "134", + "comment" : { + "en" : "This property records the foreseen permanent location of an instance of E19 Physical Object at the time of validity of the record or database containing the statement that uses this property.\nP54 has current permanent location (is current permanent location of) is similar to P55 has current location (currently holds). However, it indicates the E53 Place currently reserved for an object, such as the permanent storage location or a permanent exhibit location. The object may be temporarily removed from the permanent location, for example when used in temporary exhibitions or loaned to another institution. The object may never actually be located at its permanent location." + }, + "attributes" : [ "object", "external" ], + "id" : "547" + }, { + "iri" : "http://w3id.org/vir#K14i_has_symbolic_value", + "baseIri" : "http://w3id.org/vir", + "range" : "133", + "label" : { + "IRI-based" : "K14i_has_symbolic_value", + "undefined" : "has symbolic value" + }, + "superproperty" : [ "127" ], + "domain" : "132", + "comment" : { + "undefined" : "The property indicates the symbolic value of the attribute presents in a representation" + }, + "attributes" : [ "object" ], + "id" : "375" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P29_custody_received_by", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "78", + "label" : { + "de" : "übertrug Gewahrsam auf", + "IRI-based" : "P29_custody_received_by", + "ru" : "опека получена", + "pt" : "custódia recebida por", + "el" : "μετεβίβασε κατοχή σε", + "en" : "custody received by", + "fr" : "changement de détenteur au profit de", + "zh" : "监护权转至" + }, + "superproperty" : [ "122" ], + "domain" : "120", + "comment" : { + "en" : "This property identifies the instance(s) E39 Actor who receive custody of an instance of E18 Physical Thing in an instance of E10 Transfer of Custody.\nThe property will typically describe Actors receiving custody of an object when it is handed over from another Actor’s care. On occasion, physical custody may be received involuntarily or illegally – through accident, unsolicited donation, or theft.\nIn reality, custody is either transferred to someone or from someone, or both." + }, + "attributes" : [ "object", "external" ], + "id" : "148" + }, { + "iri" : "http://w3id.org/vir#K8_is_verso_of", + "baseIri" : "http://w3id.org/vir", + "range" : "355", + "label" : { + "IRI-based" : "K8_is_verso_of", + "undefined" : "is verso of" + }, + "superproperty" : [ "290" ], + "domain" : "325", + "comment" : { + "undefined" : "The property indicates the presence of a verso in the described object" + }, + "attributes" : [ "object" ], + "id" : "527" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P107i_is_current_or_former_member_of", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "20", + "label" : { + "de" : "ist derzeitiges oder früheres Mitglied von", + "IRI-based" : "P107i_is_current_or_former_member_of", + "ru" : "является действующим или бывшим членом", + "pt" : "é ou foi membro de", + "el" : "είναι ή ήταν μέλος του/της", + "en" : "is current or former member of", + "fr" : "est actuel ou ancien membre de", + "zh" : "是当前或以往成员" + }, + "domain" : "78", + "attributes" : [ "object", "external" ], + "id" : "549" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P133_is_spatiotemporally_separated_from", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "249", + "label" : { + "IRI-based" : "P133_is_spatiotemporally_separated_from", + "en" : "is spatiotemporally separated from" + }, + "domain" : "249", + "comment" : { + "en" : "This symmetric property associates two instances of E92 Spacetime Volume that have no extents in common. If only the fuzzy boundaries of the instances of E92 Spacetime Volume overlap, this property cannot be determined from observation alone and therefore should not be applied. However, there may be other forms of justification that the two instances of E92 Spacetime Volume must not have any of their extents in common regardless of where and when precisely.\nIf this property holds for two instances of E92 Spacetime Volume then it cannot be the case that P132 spatiotemporally overlaps with also holds for the same two instances. Furthermore, there are cases where neither P132 spatiotemporally overlaps with nor P133 is spatiotemporally separated from holds between two instances of E92 Spacetime Volume. This would occur where only an overlap of the fuzzy boundaries of the two instances of E92 Spacetime Volume occurs and no other evidence is available.\nThis property is not transitive. This property is symmetric. This property is irreflexive." + }, + "attributes" : [ "object", "external" ], + "id" : "568" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P97_from_father", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "111", + "label" : { + "de" : "gab Vaterschaft", + "IRI-based" : "P97_from_father", + "ru" : "от отца", + "pt" : "pelo pai", + "el" : "είχε πατέρα", + "en" : "from father", + "fr" : "de père", + "zh" : "来自父亲" + }, + "domain" : "15", + "comment" : { + "en" : "This property links an instance of E67 Birth to an instance of E21 Person in the role of biological father.\nNote that biological fathers are not seen as necessary participants in the birth, whereas birth-giving mothers are (see P96 by mother (gave birth)). The Person being born is linked to the Birth with the property P98 brought into life (was born).\nThis is not intended for use with general natural history material, only people. There is no explicit method for modelling conception and gestation except by using extensions.\nAn instance of E67 Birth is normally (but not always) associated with one biological father." + }, + "attributes" : [ "object", "external" ], + "id" : "525" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P7i_witnessed", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "231", + "label" : { + "de" : "bezeugte", + "IRI-based" : "P7i_witnessed", + "ru" : "был местом совершения", + "pt" : "testemunhou", + "el" : "υπήρξε τόπος του", + "en" : "witnessed", + "fr" : "a été témoin de", + "zh" : "发生过" + }, + "superproperty" : [ "248" ], + "domain" : "100", + "attributes" : [ "object", "external" ], + "id" : "250" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P100i_died_in", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "75", + "label" : { + "de" : "starb in", + "IRI-based" : "P100i_died_in", + "ru" : "умер в", + "pt" : "morreu em", + "el" : "πέθανε σε", + "en" : "died in", + "fr" : "est mort par", + "zh" : "死于" + }, + "superproperty" : [ "216" ], + "domain" : "111", + "attributes" : [ "object", "external" ], + "id" : "316" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P151i_participated_in", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "63", + "label" : { + "IRI-based" : "P151i_participated_in", + "en" : "participated in" + }, + "superproperty" : [ "199" ], + "domain" : "20", + "attributes" : [ "object", "external" ], + "id" : "531" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P40i_was_observed_in", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "273", + "label" : { + "de" : "wurde beobachtet in", + "IRI-based" : "P40i_was_observed_in", + "ru" : "наблюдался в", + "pt" : "foi verificada durante", + "el" : "παρατηρήθηκε από", + "en" : "was observed in", + "fr" : "a été relevée au cours de", + "zh" : "被观测" + }, + "superproperty" : [ "234" ], + "domain" : "36", + "attributes" : [ "object", "external" ], + "id" : "274" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P30_transferred_custody_of", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "11", + "label" : { + "de" : "übertrug Gewahrsam über", + "IRI-based" : "P30_transferred_custody_of", + "ru" : "передало опеку на", + "pt" : "transferida custódia de", + "el" : "μετεβίβασε κατοχή του/της/των", + "en" : "transferred custody of", + "fr" : "changement de détenteur concernant", + "zh" : "转移监护权的是" + }, + "domain" : "120", + "comment" : { + "en" : "This property identifies the instance(s) of E18 Physical Thing concerned in an instance of E10 Transfer of Custody.\nThe property will typically describe the object that is handed over by an instance of E39 Actor to to the custody of another instance of E39 Actor. On occasion, physical custody may be transferred involuntarily or illegally – through accident, unsolicited donation, or theft." + }, + "attributes" : [ "object", "external" ], + "id" : "297" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P45i_is_incorporated_in", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "11", + "label" : { + "de" : "ist enthalten in", + "IRI-based" : "P45i_is_incorporated_in", + "ru" : "входит в состав", + "pt" : "está presente em", + "el" : "είναι ενσωματωμένος/η/ο σε", + "en" : "is incorporated in", + "fr" : "est présent dans", + "zh" : "结合在" + }, + "domain" : "97", + "attributes" : [ "object", "external" ], + "id" : "338" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P90b_has_upper_value_limit", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "570", + "label" : { + "IRI-based" : "P90b_has_upper_value_limit", + "en" : "has upper value limit" + }, + "domain" : "36", + "attributes" : [ "datatype", "external" ], + "id" : "569" + }, { + "iri" : "http://w3id.org/vir#K21i_is_depiction_of_attribute", + "baseIri" : "http://w3id.org/vir", + "range" : "30", + "label" : { + "IRI-based" : "K21i_is_depiction_of_attribute", + "undefined" : "is depiction of attribute" + }, + "superproperty" : [ "498" ], + "domain" : "108", + "comment" : { + "undefined" : "This property indicates the type of object depicted by an iconographical attribute" + }, + "attributes" : [ "object" ], + "id" : "499" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P125_used_object_of_type", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "108", + "label" : { + "de" : "benutzte Objekt des Typus", + "IRI-based" : "P125_used_object_of_type", + "ru" : "использовал объект типа", + "pt" : "usou objeto do tipo", + "el" : "χρησιμοποίησε αντικείμενο τύπου", + "en" : "used object of type", + "fr" : "a employé un objet du type", + "zh" : "使用对象类型" + }, + "domain" : "45", + "subproperty" : [ "185" ], + "comment" : { + "en" : "This property associates an instance of E7 Activity to an instance of E55 Type, which classifies an instance of E70 Thing used in an instance of E7 Activity, when the specific instance is either unknown or not of interest, such as use of \"a hammer\".\nThis property is a shortcut of the more fully developed path from E7 Activity through P16 used specific object, E70 Thing, P2 has type, to E55 Type" + }, + "attributes" : [ "object", "external" ], + "id" : "240" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P25i_moved_by", + "inverse" : "571", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "160", + "label" : { + "de" : "wurde bewegt durch", + "IRI-based" : "P25i_moved_by", + "ru" : "перемещен посредством", + "pt" : "foi locomovido por", + "el" : "μετακινήθηκε από", + "en" : "moved by", + "fr" : "a été déplacé par", + "zh" : "被移动" + }, + "superproperty" : [ "196" ], + "domain" : "134", + "attributes" : [ "object", "external" ], + "id" : "413" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P169i_spacetime_volume_is_defined_by", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "573", + "label" : { + "IRI-based" : "P169i_spacetime_volume_is_defined_by", + "en" : "spacetime volume is defined by" + }, + "domain" : "249", + "comment" : { + "en" : "Scope note for 'P169': This property associates an instance of E95 Spacetime Primitive with the instance of E92 Spacetime Volume it defines." + }, + "attributes" : [ "datatype", "external" ], + "id" : "572" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P95_has_formed", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "20", + "label" : { + "de" : "hat gebildet", + "IRI-based" : "P95_has_formed", + "ru" : "сформировал", + "pt" : "formou", + "el" : "σχημάτισε", + "en" : "has formed", + "fr" : "a fondé", + "zh" : "已经组成" + }, + "superproperty" : [ "113" ], + "domain" : "63", + "comment" : { + "en" : "This property associates the instance of E66 Formation with the instance of E74 Group that it founded." + }, + "attributes" : [ "object", "external" ], + "id" : "384" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P142_used_constituent", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "132", + "label" : { + "de" : "benutzte Bestandteil", + "IRI-based" : "P142_used_constituent", + "en" : "used constituent", + "zh" : "使用构成成分" + }, + "superproperty" : [ "52" ], + "domain" : "156", + "comment" : { + "en" : "This property associates an instance of E15 Identifier Assignment with the instance of E90 Symbolic Object used as constituent of an instance of E42 Identifier in this act of assignment." + }, + "attributes" : [ "object", "external" ], + "id" : "182" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P42i_was_assigned_by", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "401", + "label" : { + "de" : "wurde zugewiesen durch", + "IRI-based" : "P42i_was_assigned_by", + "ru" : "был присвоен посредством", + "pt" : "foi atribuído por", + "el" : "αποδόθηκε από", + "en" : "was assigned by", + "fr" : "a été attribué par", + "zh" : "被分配类型" + }, + "superproperty" : [ "234" ], + "domain" : "108", + "attributes" : [ "object", "external" ], + "id" : "519" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P94_has_created", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "4", + "label" : { + "de" : "hat erschaffen", + "IRI-based" : "P94_has_created", + "ru" : "создал", + "pt" : "criou", + "el" : "δημιούργησε", + "en" : "has created", + "fr" : "a créé", + "zh" : "已创建了" + }, + "superproperty" : [ "113" ], + "domain" : "8", + "subproperty" : [ "310" ], + "comment" : { + "en" : "This property links an instance of E65 Creation to the instance of E28 Conceptual Object created by it.\nIt represents the act of conceiving the intellectual content of the instance of E28 Conceptual Object. It does not represent the act of creating the first physical carrier of the instance of E28 Conceptual Object. As an example, this is the composition of a poem, not its commitment to paper." + }, + "attributes" : [ "object", "external" ], + "id" : "211" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P14i_performed", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "45", + "label" : { + "de" : "führte aus", + "IRI-based" : "P14i_performed", + "ru" : "выполнял", + "pt" : "executou", + "el" : "πραγματοποίησε", + "en" : "performed", + "fr" : "a exécuté", + "zh" : "执行" + }, + "superproperty" : [ "199" ], + "domain" : "78", + "subproperty" : [ "147", "121", "164", "539" ], + "attributes" : [ "object", "external" ], + "id" : "149" + }, { + "iri" : "http://w3id.org/vir#K24_portray", + "baseIri" : "http://w3id.org/vir", + "range" : "86", + "label" : { + "IRI-based" : "K24_portray", + "undefined" : "portray" + }, + "superproperty" : [ "374" ], + "domain" : "126", + "comment" : { + "undefined" : "This property put in relation an iconographical object with the portrayed character." + }, + "attributes" : [ "object" ], + "id" : "432" + }, { + "iri" : "http://w3id.org/vir#K11_assigned", + "baseIri" : "http://w3id.org/vir", + "range" : "133", + "label" : { + "IRI-based" : "K11_assigned", + "undefined" : "assigned" + }, + "superproperty" : [ "158" ], + "domain" : "28", + "comment" : { + "undefined" : "The property indicates the status assigned during the visual recognition event" + }, + "attributes" : [ "object" ], + "id" : "235" + }, { + "iri" : "http://w3id.org/vir#K36_is_similar_to", + "baseIri" : "http://w3id.org/vir", + "range" : "132", + "label" : { + "IRI-based" : "K36_is_similar_to" + }, + "superproperty" : [ "373" ], + "domain" : "132", + "comment" : { + "undefined" : "The property documents the assignment of Similarity status of a symbolic object. It is a shortcut for the more fully developed path IC21 Similarity Statement assign similarity (K35) to two E90 Symbolic Objects ." + }, + "attributes" : [ "object" ], + "id" : "567" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P177_assigned_property_of_type", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "108", + "label" : { + "IRI-based" : "P177_assigned_property_of_type", + "en" : "assigned property of type" + }, + "superproperty" : [ "438" ], + "domain" : "233", + "comment" : { + "en" : "This property associates an instance of E13 Attribute Assignment with the type of property or relation that this assignment maintains to hold between the item to which it assigns an attribute and the attribute itself. Note that the properties defined by the CIDOC CRM also constitute instances of E55 Type themselves. The direction of the assigned property of type is understood to be from the attributed item (the range of property P140 assigned attribute to) to the attribute item (the range of the property P141 assigned). More than one property type may be assigned to hold between two items.\nA comprehensive explanation about refining CIDOC CRM concepts by E55 Type is given in the section “About Types” in the section on “Specific Modelling Constructs” of this document." + }, + "attributes" : [ "object", "external" ], + "id" : "439" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P71_lists", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "40", + "label" : { + "de" : "listet", + "IRI-based" : "P71_lists", + "ru" : "перечисляет", + "pt" : "define", + "el" : "περιλαμβάνει", + "en" : "lists", + "fr" : "définit", + "zh" : "列出" + }, + "superproperty" : [ "431" ], + "domain" : "219", + "comment" : { + "en" : "This property associates an instance of E32 Authority Document, with an instance of E1 CRM Entity which it lists for reference purposes." + }, + "attributes" : [ "object", "external" ], + "id" : "544" + }, { + "iri" : "http://w3id.org/vir#K6i_has_front", + "baseIri" : "http://w3id.org/vir", + "range" : "331", + "label" : { + "IRI-based" : "K6i_has_front", + "undefined" : "has front" + }, + "superproperty" : [ "289" ], + "domain" : "325", + "comment" : { + "undefined" : "The property documents the presence of a Verso or a Recto, respectively in the back or in the front of an object." + }, + "attributes" : [ "object" ], + "id" : "441" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P126i_was_employed_in", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "267", + "label" : { + "de" : "wurde verwendet bei", + "IRI-based" : "P126i_was_employed_in", + "ru" : "использовался в", + "pt" : "foi empregado em", + "el" : "χρησιμοποιήθηκε σε", + "en" : "was employed in", + "fr" : "a été employé dans", + "zh" : "被用于" + }, + "domain" : "97", + "attributes" : [ "object", "external" ], + "id" : "268" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P166i_had_presence", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "173", + "label" : { + "IRI-based" : "P166i_had_presence", + "en" : "had presence" + }, + "superproperty" : [ "301" ], + "domain" : "249", + "attributes" : [ "object", "external" ], + "id" : "468" + }, { + "iri" : "http://w3id.org/vir#K24i_is_portrayed_in", + "baseIri" : "http://w3id.org/vir", + "range" : "126", + "label" : { + "IRI-based" : "K24i_is_portrayed_in", + "undefined" : "is portrayed by" + }, + "superproperty" : [ "127" ], + "domain" : "86", + "comment" : { + "undefined" : "This property put in relation an iconographical object with the portrayed character." + }, + "attributes" : [ "object" ], + "id" : "377" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P129_is_about", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "40", + "label" : { + "de" : "handelt über", + "IRI-based" : "P129_is_about", + "ru" : "касается", + "pt" : "é sobre", + "el" : "έχει ως θέμα", + "en" : "is about", + "fr" : "est au sujet de", + "zh" : "有关" + }, + "superproperty" : [ "431" ], + "domain" : "3", + "comment" : { + "en" : "This property documents that an instance of E89 Propositional Object has as subject an instance of E1 CRM Entity.\nThis differs from P67 refers to (is referred to by), which refers to an instance of E1 CRM Entity, in that it describes the primary subject or subjects of an instance of E89 Propositional Object." + }, + "attributes" : [ "object", "external" ], + "id" : "92" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P198_holds_or_supports", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "11", + "label" : { + "IRI-based" : "P198_holds_or_supports", + "en" : "holds or supports" + }, + "domain" : "11", + "comment" : { + "en" : "This property relates one instance of E18 Physical Thing which acts as a container or support to a supported or contained instance of E18 Physical Thing. Typical examples of E18 Physical Things which are intended to function as a container or support include shelves, folders or boxes. These containers or supports provide a stable surface which is intended for other physical objects to be placed upon for storage, display, transport or other similar functions.\nThis property is a shortcut of the more fully developed path from E18 Physical Thing through P59 has section, E53 Place, P53i is former or current location of, to E18 Physical Thing. It is not a sub-property of P46 is composed of, as the held or supported object is not a component of the container or support.\nThis property can be used to avoid explicitly instantiating the E53 Place which is defined by an instance of E18 Physical Thing, especially when the only intended use of that instance of E18 Physical Thing is to act as a container or surface for the storage of other instances of E18 Physical Thing. The place’s existence is defined by the existence of the container or surface, and will go out of existence at the same time as the destruction of the container or surface.\nThis property is transitive. This property is asymmetric." + }, + "attributes" : [ "object", "external" ], + "id" : "536" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P9i_forms_part_of", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "231", + "label" : { + "de" : "bildet Teil von", + "IRI-based" : "P9i_forms_part_of", + "ru" : "формирует часть", + "pt" : "faz parte de", + "el" : "αποτελεί μέρος του/της", + "en" : "forms part of", + "fr" : "fait partie de", + "zh" : "组成部分" + }, + "superproperty" : [ "300" ], + "domain" : "231", + "attributes" : [ "object", "external" ], + "id" : "303" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P12_occurred_in_the_presence_of", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "278", + "label" : { + "de" : "fand statt im Beisein von", + "IRI-based" : "P12_occurred_in_the_presence_of", + "ru" : "появился в присутствии", + "pt" : "ocorreu na presença de", + "el" : "συνέβη παρουσία του/της", + "en" : "occurred in the presence of", + "fr" : "est arrivé en présence de", + "zh" : "已出现" + }, + "domain" : "198", + "subproperty" : [ "538", "571", "22", "13", "113", "52", "23" ], + "comment" : { + "en" : "This property describes the active or passive presence of an E77 Persistent Item in an instance of E5 Event without implying any specific role.\nIt documents known events in which an instance of E77 Persistent Item was present during the course of its life or history. For example, an object may be the desk, now in a museum, on which a treaty was signed. The instance of E53 Place and the instance of E52 Time-Span where and when these events happened provide us with constraints about the presence of the related instance E77 Persistent Item in the past. Instances of E90 Symbolic Object, in particular information objects, are physically present in events via at least one of the instances of E18 Physical Thing carrying them. Note, that the human mind can be such a carrier. A precondition for a transfer of information to a person or another new physical carrier is the presence of the respective information object and this person or physical thing in one event." + }, + "attributes" : [ "object", "external" ], + "id" : "187" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P25_moved", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "134", + "label" : { + "de" : "bewegte", + "IRI-based" : "P25_moved", + "ru" : "переместил", + "pt" : "locomoveu", + "el" : "μετεκίνησε", + "en" : "moved", + "fr" : "a déplacé", + "zh" : "移动" + }, + "superproperty" : [ "187" ], + "domain" : "160", + "comment" : { + "en" : "This property identifies an instance of E19 Physical Object that was moved by an instance of E9 Move. A move must concern at least one object.\nThe property implies the object’s passive participation. For example, Monet’s painting “Impression sunrise” was moved for the first Impressionist exhibition in 1874." + }, + "attributes" : [ "object", "external" ], + "id" : "571" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P20i_was_purpose_of", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "45", + "label" : { + "de" : "war Zweck von", + "IRI-based" : "P20i_was_purpose_of", + "ru" : "был целью для", + "pt" : "era o propósito de", + "el" : "ήταν σκοπός του/της", + "en" : "was purpose of", + "fr" : "était le but de", + "zh" : "是为了" + }, + "domain" : "198", + "attributes" : [ "object", "external" ], + "id" : "489" + }, { + "iri" : "http://www.cidoc-crm.org/cidoc-crm/P191i_was_duration_of", + "baseIri" : "http://www.cidoc-crm.org/cidoc-crm", + "range" : "82", + "label" : { + "IRI-based" : "P191i_was_duration_of", + "en" : "was duration of" + }, + "domain" : "36", + "attributes" : [ "object", "external" ], + "id" : "103" + }, { + "iri" : "http://w3id.org/vir#K25_express", + "baseIri" : "http://w3id.org/vir", + "range" : "132", + "label" : { + "IRI-based" : "K25_express", + "undefined" : "express" + }, + "superproperty" : [ "374" ], + "domain" : "30", + "comment" : { + "undefined" : "This property put in relation a symbolic object with a personification in a work of art" + }, + "attributes" : [ "object" ], + "id" : "435" + } ] +} \ No newline at end of file diff --git a/webvowl/data/wine.json b/webvowl/data/wine.json new file mode 100644 index 0000000..21f420d --- /dev/null +++ b/webvowl/data/wine.json @@ -0,0 +1,4099 @@ +{ + "_comment" : "Created with OWL2VOWL (version 0.3.7), http://vowl.visualdataweb.org", + "header" : { + "languages" : [ "en", "fr", "undefined" ], + "baseIris" : [ "http://www.w3.org/1999/02/22-rdf-syntax-ns", "http://www.w3.org/2000/01/rdf-schema", "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", "http://www.w3.org/2001/XMLSchema" ], + "prefixList" : { + "owl" : "http://www.w3.org/2002/07/owl#", + "rdf" : "http://www.w3.org/1999/02/22-rdf-syntax-ns#", + "vin" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#", + "xsd" : "http://www.w3.org/2001/XMLSchema#", + "" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#", + "xml" : "http://www.w3.org/XML/1998/namespace", + "food" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#", + "rdfs" : "http://www.w3.org/2000/01/rdf-schema#" + }, + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "undefined" : "Wine Ontology" + }, + "comments" : { + "undefined" : "An example OWL ontology" + }, + "other" : { + "priorVersion" : [ { + "identifier" : "priorVersion", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2003/CR-owl-guide-20030818/wine", + "type" : "iri" + } ] + } + }, + "namespace" : [ ], + "class" : [ { + "id" : "0", + "type" : "owl:intersectionOf" + }, { + "id" : "6", + "type" : "owl:Class" + }, { + "id" : "8", + "type" : "owl:Class" + }, { + "id" : "11", + "type" : "owl:Class" + }, { + "id" : "12", + "type" : "owl:intersectionOf" + }, { + "id" : "14", + "type" : "owl:Class" + }, { + "id" : "16", + "type" : "owl:intersectionOf" + }, { + "id" : "19", + "type" : "owl:intersectionOf" + }, { + "id" : "20", + "type" : "owl:intersectionOf" + }, { + "id" : "22", + "type" : "owl:intersectionOf" + }, { + "id" : "29", + "type" : "owl:intersectionOf" + }, { + "id" : "31", + "type" : "owl:intersectionOf" + }, { + "id" : "32", + "type" : "owl:Class" + }, { + "id" : "36", + "type" : "owl:intersectionOf" + }, { + "id" : "38", + "type" : "owl:Class" + }, { + "id" : "28", + "type" : "owl:Class" + }, { + "id" : "45", + "type" : "owl:intersectionOf" + }, { + "id" : "46", + "type" : "owl:intersectionOf" + }, { + "id" : "48", + "type" : "owl:intersectionOf" + }, { + "id" : "7", + "type" : "owl:Class" + }, { + "id" : "51", + "type" : "owl:intersectionOf" + }, { + "id" : "52", + "type" : "owl:intersectionOf" + }, { + "id" : "53", + "type" : "owl:complementOf" + }, { + "id" : "54", + "type" : "owl:intersectionOf" + }, { + "id" : "56", + "type" : "owl:intersectionOf" + }, { + "id" : "43", + "type" : "owl:Class" + }, { + "id" : "57", + "type" : "owl:intersectionOf" + }, { + "id" : "58", + "type" : "owl:Class" + }, { + "id" : "59", + "type" : "owl:intersectionOf" + }, { + "id" : "34", + "type" : "owl:Class" + }, { + "id" : "60", + "type" : "owl:intersectionOf" + }, { + "id" : "61", + "type" : "owl:intersectionOf" + }, { + "id" : "66", + "type" : "owl:intersectionOf" + }, { + "id" : "67", + "type" : "owl:intersectionOf" + }, { + "id" : "68", + "type" : "owl:intersectionOf" + }, { + "id" : "69", + "type" : "owl:intersectionOf" + }, { + "id" : "21", + "type" : "owl:intersectionOf" + }, { + "id" : "72", + "type" : "owl:intersectionOf" + }, { + "id" : "76", + "type" : "owl:Class" + }, { + "id" : "71", + "type" : "owl:Class" + }, { + "id" : "37", + "type" : "owl:intersectionOf" + }, { + "id" : "82", + "type" : "owl:Class" + }, { + "id" : "84", + "type" : "owl:Class" + }, { + "id" : "85", + "type" : "owl:intersectionOf" + }, { + "id" : "55", + "type" : "owl:intersectionOf" + }, { + "id" : "13", + "type" : "owl:Class" + }, { + "id" : "18", + "type" : "owl:intersectionOf" + }, { + "id" : "15", + "type" : "owl:Class" + }, { + "id" : "90", + "type" : "owl:Class" + }, { + "id" : "93", + "type" : "owl:Class" + }, { + "id" : "97", + "type" : "owl:Class" + }, { + "id" : "33", + "type" : "owl:Class" + }, { + "id" : "65", + "type" : "owl:Class" + }, { + "id" : "98", + "type" : "owl:intersectionOf" + }, { + "id" : "99", + "type" : "owl:intersectionOf" + }, { + "id" : "25", + "type" : "owl:Class" + }, { + "id" : "83", + "type" : "owl:Class" + }, { + "id" : "3", + "type" : "owl:Class" + }, { + "id" : "103", + "type" : "owl:intersectionOf" + }, { + "id" : "91", + "type" : "owl:Class" + }, { + "id" : "47", + "type" : "owl:intersectionOf" + }, { + "id" : "104", + "type" : "owl:intersectionOf" + }, { + "id" : "105", + "type" : "owl:intersectionOf" + }, { + "id" : "106", + "type" : "owl:Class" + }, { + "id" : "107", + "type" : "owl:intersectionOf" + }, { + "id" : "108", + "type" : "owl:Class" + }, { + "id" : "110", + "type" : "owl:intersectionOf" + }, { + "id" : "1", + "type" : "owl:Class" + }, { + "id" : "112", + "type" : "owl:intersectionOf" + }, { + "id" : "95", + "type" : "owl:Class" + }, { + "id" : "113", + "type" : "owl:intersectionOf" + }, { + "id" : "114", + "type" : "owl:intersectionOf" + }, { + "id" : "41", + "type" : "owl:Class" + }, { + "id" : "50", + "type" : "owl:Class" + }, { + "id" : "115", + "type" : "owl:intersectionOf" + }, { + "id" : "116", + "type" : "owl:intersectionOf" + }, { + "id" : "89", + "type" : "owl:Class" + }, { + "id" : "118", + "type" : "owl:intersectionOf" + }, { + "id" : "123", + "type" : "owl:intersectionOf" + }, { + "id" : "9", + "type" : "owl:intersectionOf" + }, { + "id" : "133", + "type" : "owl:intersectionOf" + }, { + "id" : "102", + "type" : "owl:Class" + }, { + "id" : "77", + "type" : "owl:Class" + }, { + "id" : "63", + "type" : "owl:Class" + }, { + "id" : "23", + "type" : "owl:equivalentClass" + }, { + "id" : "87", + "type" : "owl:intersectionOf" + }, { + "id" : "136", + "type" : "owl:intersectionOf" + }, { + "id" : "96", + "type" : "owl:Class" + }, { + "id" : "30", + "type" : "owl:intersectionOf" + }, { + "id" : "151", + "type" : "owl:intersectionOf" + }, { + "id" : "154", + "type" : "owl:intersectionOf" + }, { + "id" : "155", + "type" : "owl:intersectionOf" + }, { + "id" : "117", + "type" : "owl:intersectionOf" + }, { + "id" : "49", + "type" : "owl:Class" + }, { + "id" : "86", + "type" : "owl:intersectionOf" + }, { + "id" : "79", + "type" : "owl:Class" + }, { + "id" : "40", + "type" : "owl:Thing" + }, { + "id" : "156", + "type" : "owl:intersectionOf" + }, { + "id" : "101", + "type" : "owl:Thing" + }, { + "id" : "74", + "type" : "owl:Thing" + }, { + "id" : "158", + "type" : "rdfs:Datatype" + }, { + "id" : "81", + "type" : "owl:Thing" + }, { + "id" : "120", + "type" : "owl:Thing" + }, { + "id" : "160", + "type" : "owl:intersectionOf" + }, { + "id" : "109", + "type" : "owl:Class" + }, { + "id" : "88", + "type" : "owl:Class" + }, { + "id" : "165", + "type" : "owl:intersectionOf" + }, { + "id" : "167", + "type" : "owl:intersectionOf" + }, { + "id" : "168", + "type" : "owl:intersectionOf" + }, { + "id" : "170", + "type" : "owl:intersectionOf" + }, { + "id" : "171", + "type" : "owl:intersectionOf" + }, { + "id" : "176", + "type" : "owl:intersectionOf" + }, { + "id" : "10", + "type" : "owl:Class" + }, { + "id" : "138", + "type" : "owl:Class" + }, { + "id" : "134", + "type" : "owl:Class" + }, { + "id" : "186", + "type" : "owl:intersectionOf" + }, { + "id" : "17", + "type" : "owl:intersectionOf" + }, { + "id" : "188", + "type" : "owl:intersectionOf" + }, { + "id" : "44", + "type" : "owl:Class" + }, { + "id" : "199", + "type" : "owl:intersectionOf" + }, { + "id" : "92", + "type" : "owl:Class" + }, { + "id" : "78", + "type" : "owl:Class" + }, { + "id" : "200", + "type" : "owl:intersectionOf" + }, { + "id" : "201", + "type" : "owl:intersectionOf" + }, { + "id" : "163", + "type" : "owl:Class" + }, { + "id" : "210", + "type" : "owl:intersectionOf" + }, { + "id" : "220", + "type" : "owl:intersectionOf" + }, { + "id" : "125", + "type" : "owl:equivalentClass" + }, { + "id" : "226", + "type" : "owl:intersectionOf" + }, { + "id" : "94", + "type" : "owl:unionOf" + }, { + "id" : "229", + "type" : "owl:intersectionOf" + }, { + "id" : "4", + "type" : "owl:unionOf" + }, { + "id" : "35", + "type" : "owl:Class" + }, { + "id" : "232", + "type" : "owl:intersectionOf" + }, { + "id" : "234", + "type" : "owl:intersectionOf" + }, { + "id" : "237", + "type" : "owl:intersectionOf" + }, { + "id" : "240", + "type" : "owl:intersectionOf" + }, { + "id" : "26", + "type" : "owl:Class" + }, { + "id" : "245", + "type" : "owl:intersectionOf" + }, { + "id" : "144", + "type" : "owl:Class" + }, { + "id" : "187", + "type" : "owl:Class" + }, { + "id" : "246", + "type" : "owl:intersectionOf" + }, { + "id" : "247", + "type" : "owl:intersectionOf" + } ], + "classAttribute" : [ { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#BlandFishCourse", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "instances" : 0, + "label" : { + "IRI-based" : "BlandFishCourse" + }, + "intersection" : [ "1" ], + "attributes" : [ "intersection", "external" ], + "id" : "0" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#LightMeatFowl", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "instances" : 0, + "label" : { + "IRI-based" : "LightMeatFowl" + }, + "individuals" : [ { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#Turkey", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "labels" : { + "IRI-based" : "Turkey" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#Chicken", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "labels" : { + "IRI-based" : "Chicken" + } + } ], + "attributes" : [ "external" ], + "id" : "6", + "superClasses" : [ "7" ] + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#Sauternes", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "instances" : 0, + "label" : { + "IRI-based" : "Sauternes" + }, + "individuals" : [ { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#ChateauDYchemSauterne", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "ChateauDYchemSauterne" + } + } ], + "id" : "8", + "superClasses" : [ "9", "10" ] + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#Meal", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "instances" : 0, + "label" : { + "IRI-based" : "Meal" + }, + "attributes" : [ "external" ], + "id" : "11", + "superClasses" : [ "3" ] + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#IceWine", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "instances" : 0, + "label" : { + "IRI-based" : "IceWine" + }, + "individuals" : [ { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#SelaksIceWine", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "SelaksIceWine" + } + } ], + "intersection" : [ "13", "10" ], + "attributes" : [ "intersection" ], + "id" : "12" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#OysterShellfish", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "instances" : 0, + "label" : { + "IRI-based" : "OysterShellfish" + }, + "individuals" : [ { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#Oysters", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "labels" : { + "IRI-based" : "Oysters" + } + } ], + "attributes" : [ "external" ], + "id" : "14", + "superClasses" : [ "15" ] + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#DryRedWine", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "instances" : 0, + "label" : { + "IRI-based" : "DryRedWine" + }, + "intersection" : [ "17", "18" ], + "attributes" : [ "intersection" ], + "id" : "16" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#LightMeatFowlCourse", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "instances" : 0, + "label" : { + "IRI-based" : "LightMeatFowlCourse" + }, + "intersection" : [ "1" ], + "attributes" : [ "intersection", "external" ], + "id" : "19" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#Semillon", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "instances" : 0, + "label" : { + "IRI-based" : "Semillon" + }, + "individuals" : [ { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#KalinCellarsSemillon", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "KalinCellarsSemillon" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#CongressSpringsSemillon", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "CongressSpringsSemillon" + } + } ], + "intersection" : [ "21" ], + "attributes" : [ "intersection" ], + "id" : "20" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#CaliforniaWine", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "instances" : 0, + "label" : { + "IRI-based" : "CaliforniaWine" + }, + "intersection" : [ "23" ], + "attributes" : [ "intersection" ], + "id" : "22" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#RedTableWine", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "instances" : 0, + "label" : { + "IRI-based" : "RedTableWine" + }, + "individuals" : [ { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#MariettaOldVinesRed", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "MariettaOldVinesRed" + } + } ], + "intersection" : [ "30" ], + "attributes" : [ "intersection" ], + "id" : "29" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#Chardonnay", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "instances" : 0, + "label" : { + "IRI-based" : "Chardonnay" + }, + "individuals" : [ { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#BancroftChardonnay", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "BancroftChardonnay" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#MountEdenVineyardEdnaValleyChardonnay", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "MountEdenVineyardEdnaValleyChardonnay" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#MountadamChardonnay", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "MountadamChardonnay" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#FormanChardonnay", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "FormanChardonnay" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#PeterMccoyChardonnay", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "PeterMccoyChardonnay" + } + } ], + "intersection" : [ "23" ], + "attributes" : [ "intersection" ], + "id" : "31" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#PastaWithWhiteSauce", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "instances" : 0, + "label" : { + "IRI-based" : "PastaWithWhiteSauce" + }, + "subClasses" : [ "34", "35" ], + "attributes" : [ "external" ], + "id" : "32", + "superClasses" : [ "33" ] + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#Anjou", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "instances" : 0, + "label" : { + "IRI-based" : "Anjou" + }, + "individuals" : [ { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#RoseDAnjou", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "RoseDAnjou" + } + } ], + "intersection" : [ "37" ], + "attributes" : [ "intersection" ], + "id" : "36" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#VintageYear", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "instances" : 0, + "label" : { + "IRI-based" : "VintageYear" + }, + "individuals" : [ { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#Year1998", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "Year1998" + } + } ], + "id" : "38" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#RedMeat", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "instances" : 0, + "label" : { + "IRI-based" : "RedMeat" + }, + "subClasses" : [ "43", "44" ], + "attributes" : [ "external" ], + "id" : "28", + "superClasses" : [ "26" ] + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#ShellfishCourse", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "instances" : 0, + "label" : { + "IRI-based" : "ShellfishCourse" + }, + "intersection" : [ "1" ], + "attributes" : [ "intersection", "external" ], + "id" : "45" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#WhiteNonSweetWine", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "instances" : 0, + "label" : { + "IRI-based" : "WhiteNonSweetWine" + }, + "intersection" : [ "47" ], + "attributes" : [ "intersection" ], + "id" : "46" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#CabernetSauvignon", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "instances" : 0, + "label" : { + "IRI-based" : "CabernetSauvignon" + }, + "individuals" : [ { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#FormanCabernetSauvignon", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "FormanCabernetSauvignon" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#MariettaCabernetSauvignon", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "MariettaCabernetSauvignon" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#PageMillWineryCabernetSauvignon", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "PageMillWineryCabernetSauvignon" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#SantaCruzMountainVineyardCabernetSauvignon", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "SantaCruzMountainVineyardCabernetSauvignon" + } + } ], + "intersection" : [ "23" ], + "attributes" : [ "intersection" ], + "id" : "48" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#Fowl", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "instances" : 0, + "label" : { + "IRI-based" : "Fowl" + }, + "subClasses" : [ "50", "6" ], + "attributes" : [ "external" ], + "id" : "7", + "superClasses" : [ "49" ] + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#FrenchWine", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "instances" : 0, + "label" : { + "IRI-based" : "FrenchWine" + }, + "intersection" : [ "23" ], + "attributes" : [ "intersection" ], + "id" : "51" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#GermanWine", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "instances" : 0, + "label" : { + "IRI-based" : "GermanWine" + }, + "intersection" : [ "23" ], + "attributes" : [ "intersection" ], + "id" : "52" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#NonConsumableThing", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "instances" : 0, + "label" : { + "IRI-based" : "NonConsumableThing" + }, + "attributes" : [ "complement", "external" ], + "id" : "53", + "complement" : [ "3" ] + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#WhiteBurgundy", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "instances" : 0, + "label" : { + "IRI-based" : "WhiteBurgundy" + }, + "individuals" : [ { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#PulignyMontrachetWhiteBurgundy", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "PulignyMontrachetWhiteBurgundy" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#CortonMontrachetWhiteBurgundy", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "CortonMontrachetWhiteBurgundy" + } + } ], + "intersection" : [ "55", "47" ], + "attributes" : [ "intersection" ], + "id" : "54" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#Meritage", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "instances" : 0, + "label" : { + "IRI-based" : "Meritage" + }, + "individuals" : [ { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#KathrynKennedyLateral", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "KathrynKennedyLateral" + } + } ], + "intersection" : [ "23" ], + "attributes" : [ "intersection" ], + "id" : "56" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#SpicyRedMeat", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "instances" : 0, + "label" : { + "IRI-based" : "SpicyRedMeat" + }, + "individuals" : [ { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#BeefCurry", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "labels" : { + "IRI-based" : "BeefCurry" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#GarlickyRoast", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "labels" : { + "IRI-based" : "GarlickyRoast" + } + } ], + "attributes" : [ "external" ], + "id" : "43", + "superClasses" : [ "28" ] + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#PastaWithNonSpicyRedSauceCourse", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "instances" : 0, + "label" : { + "IRI-based" : "PastaWithNonSpicyRedSauceCourse" + }, + "intersection" : [ "1" ], + "attributes" : [ "intersection", "external" ], + "id" : "57" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#Region", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "instances" : 0, + "label" : { + "IRI-based" : "Region" + }, + "individuals" : [ { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#CentralCoastRegion", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "CentralCoastRegion" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#MendocinoRegion", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "MendocinoRegion" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#BeaujolaisRegion", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "BeaujolaisRegion" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#SantaCruzMountainsRegion", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "SantaCruzMountainsRegion" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#SauterneRegion", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "SauterneRegion" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#NapaRegion", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "NapaRegion" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#ArroyoGrandeRegion", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "ArroyoGrandeRegion" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#AlsaceRegion", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "AlsaceRegion" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#AustralianRegion", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "AustralianRegion" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#ItalianRegion", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "ItalianRegion" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#SantaBarbaraRegion", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "SantaBarbaraRegion" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#CaliforniaRegion", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "CaliforniaRegion" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#ChiantiRegion", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "ChiantiRegion" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#SonomaRegion", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "SonomaRegion" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#BourgogneRegion", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "BourgogneRegion" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#MedocRegion", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "MedocRegion" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#GermanyRegion", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "GermanyRegion" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#MeursaultRegion", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "MeursaultRegion" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#SouthAustraliaRegion", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "SouthAustraliaRegion" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#FrenchRegion", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "FrenchRegion" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#NewZealandRegion", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "NewZealandRegion" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#ToursRegion", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "ToursRegion" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#PauillacRegion", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "PauillacRegion" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#SancerreRegion", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "SancerreRegion" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#EdnaValleyRegion", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "EdnaValleyRegion" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#TexasRegion", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "TexasRegion" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#MuscadetRegion", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "MuscadetRegion" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#MargauxRegion", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "MargauxRegion" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#StEmilionRegion", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "StEmilionRegion" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#CotesDOrRegion", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "CotesDOrRegion" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#AnjouRegion", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "AnjouRegion" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#LoireRegion", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "LoireRegion" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#BordeauxRegion", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "BordeauxRegion" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#PortugalRegion", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "PortugalRegion" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#CentralTexasRegion", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "CentralTexasRegion" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#USRegion", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "USRegion" + } + } ], + "id" : "58" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#SweetWine", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "instances" : 0, + "label" : { + "IRI-based" : "SweetWine" + }, + "intersection" : [ "23" ], + "attributes" : [ "intersection" ], + "id" : "59" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#PastaWithLightCreamSauce", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "instances" : 0, + "label" : { + "IRI-based" : "PastaWithLightCreamSauce" + }, + "individuals" : [ { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#PastaWithWhiteClamSauce", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "labels" : { + "IRI-based" : "PastaWithWhiteClamSauce" + } + } ], + "attributes" : [ "external" ], + "id" : "34", + "superClasses" : [ "32" ] + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#SweetDessertCourse", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "instances" : 0, + "label" : { + "IRI-based" : "SweetDessertCourse" + }, + "intersection" : [ "1" ], + "attributes" : [ "intersection", "external" ], + "id" : "60" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#FishCourse", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "instances" : 0, + "label" : { + "IRI-based" : "FishCourse" + }, + "intersection" : [ "1" ], + "attributes" : [ "intersection", "external" ], + "id" : "61" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#FullBodiedWine", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "instances" : 0, + "label" : { + "IRI-based" : "FullBodiedWine" + }, + "intersection" : [ "23" ], + "attributes" : [ "intersection" ], + "id" : "66" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#SauvignonBlanc", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "instances" : 0, + "label" : { + "IRI-based" : "SauvignonBlanc" + }, + "individuals" : [ { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#SelaksSauvignonBlanc", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "SelaksSauvignonBlanc" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#CorbansSauvignonBlanc", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "CorbansSauvignonBlanc" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#CorbansPrivateBinSauvignonBlanc", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "CorbansPrivateBinSauvignonBlanc" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#StonleighSauvignonBlanc", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "StonleighSauvignonBlanc" + } + } ], + "intersection" : [ "21" ], + "attributes" : [ "intersection" ], + "id" : "67" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#StEmilion", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "instances" : 0, + "label" : { + "IRI-based" : "StEmilion" + }, + "individuals" : [ { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#ChateauChevalBlancStEmilion", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "ChateauChevalBlancStEmilion" + } + } ], + "intersection" : [ "9" ], + "attributes" : [ "intersection" ], + "id" : "68" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#RedBordeaux", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "instances" : 0, + "label" : { + "IRI-based" : "RedBordeaux" + }, + "intersection" : [ "9", "17" ], + "attributes" : [ "intersection" ], + "id" : "69" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#SemillonOrSauvignonBlanc", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "instances" : 0, + "label" : { + "IRI-based" : "SemillonOrSauvignonBlanc" + }, + "intersection" : [ "23" ], + "attributes" : [ "intersection" ], + "id" : "21" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#Riesling", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "instances" : 0, + "label" : { + "IRI-based" : "Riesling" + }, + "individuals" : [ { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#CorbansDryWhiteRiesling", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "CorbansDryWhiteRiesling" + } + } ], + "intersection" : [ "23" ], + "attributes" : [ "intersection" ], + "id" : "72" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#Grape", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "instances" : 0, + "label" : { + "IRI-based" : "Grape" + }, + "subClasses" : [ "78", "65" ], + "attributes" : [ "external" ], + "id" : "76", + "superClasses" : [ "77" ] + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#PotableLiquid", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "instances" : 0, + "label" : { + "IRI-based" : "PotableLiquid" + }, + "subClasses" : [ "79", "23" ], + "attributes" : [ "external" ], + "id" : "71", + "superClasses" : [ "3" ] + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#Loire", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "instances" : 0, + "label" : { + "IRI-based" : "Loire" + }, + "intersection" : [ "23" ], + "attributes" : [ "intersection" ], + "id" : "37" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#PastaWithNonSpicyRedSauce", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "instances" : 0, + "label" : { + "IRI-based" : "PastaWithNonSpicyRedSauce" + }, + "individuals" : [ { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#SpaghettiWithTomatoSauce", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "labels" : { + "IRI-based" : "SpaghettiWithTomatoSauce" + } + } ], + "attributes" : [ "external" ], + "id" : "82", + "superClasses" : [ "83" ] + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#Port", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "instances" : 0, + "label" : { + "IRI-based" : "Port" + }, + "individuals" : [ { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#TaylorPort", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "TaylorPort" + } + } ], + "id" : "84", + "superClasses" : [ "17" ] + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#Pauillac", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "instances" : 0, + "label" : { + "IRI-based" : "Pauillac" + }, + "individuals" : [ { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#ChateauLafiteRothschildPauillac", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "ChateauLafiteRothschildPauillac" + } + } ], + "intersection" : [ "86" ], + "attributes" : [ "intersection" ], + "id" : "85" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#Burgundy", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "instances" : 0, + "label" : { + "IRI-based" : "Burgundy" + }, + "intersection" : [ "23" ], + "attributes" : [ "intersection" ], + "id" : "55" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#DessertWine", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "instances" : 0, + "label" : { + "IRI-based" : "DessertWine" + }, + "individuals" : [ { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#WhitehallLanePrimavera", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "WhitehallLanePrimavera" + } + } ], + "subClasses" : [ "87" ], + "id" : "13", + "superClasses" : [ "23" ] + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#DryWine", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "instances" : 0, + "label" : { + "IRI-based" : "DryWine" + }, + "intersection" : [ "23" ], + "attributes" : [ "intersection" ], + "id" : "18" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#Shellfish", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "instances" : 0, + "label" : { + "IRI-based" : "Shellfish" + }, + "subClasses" : [ "14", "89" ], + "attributes" : [ "external" ], + "id" : "15", + "superClasses" : [ "88" ] + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#Dessert", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "instances" : 0, + "label" : { + "IRI-based" : "Dessert" + }, + "subClasses" : [ "91", "92" ], + "attributes" : [ "external" ], + "id" : "90", + "superClasses" : [ "49" ] + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#WineTaste", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "instances" : 0, + "label" : { + "IRI-based" : "WineTaste" + }, + "subClasses" : [ "41", "95", "96" ], + "id" : "93", + "superClasses" : [ "94" ] + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#Winery", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "instances" : 0, + "label" : { + "IRI-based" : "Winery" + }, + "individuals" : [ { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#PeterMccoy", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "PeterMccoy" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#ClosDeVougeot", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "ClosDeVougeot" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#Elyse", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "Elyse" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#Stonleigh", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "Stonleigh" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#MountEdenVineyard", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "MountEdenVineyard" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#Selaks", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "Selaks" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#SantaCruzMountainVineyard", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "SantaCruzMountainVineyard" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#Handley", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "Handley" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#Ventana", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "Ventana" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#ClosDeLaPoussie", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "ClosDeLaPoussie" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#ChateauDeMeursault", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "ChateauDeMeursault" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#ChateauMargauxWinery", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "ChateauMargauxWinery" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#Longridge", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "Longridge" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#ChateauMorgon", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "ChateauMorgon" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#CortonMontrachet", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "CortonMontrachet" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#WhitehallLane", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "WhitehallLane" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#CongressSprings", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "CongressSprings" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#KathrynKennedy", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "KathrynKennedy" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#Taylor", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "Taylor" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#ChateauLafiteRothschild", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "ChateauLafiteRothschild" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#GaryFarrell", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "GaryFarrell" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#Beringer", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "Beringer" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#Foxen", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "Foxen" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#KalinCellars", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "KalinCellars" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#McGuinnesso", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "McGuinnesso" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#Cotturi", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "Cotturi" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#Corbans", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "Corbans" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#SaucelitoCanyon", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "SaucelitoCanyon" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#PulignyMontrachet", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "PulignyMontrachet" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#DAnjou", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "DAnjou" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#SevreEtMaine", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "SevreEtMaine" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#Forman", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "Forman" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#SeanThackrey", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "SeanThackrey" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#Bancroft", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "Bancroft" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#SchlossRothermel", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "SchlossRothermel" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#StGenevieve", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "StGenevieve" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#ChateauDYchem", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "ChateauDYchem" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#ChateauChevalBlanc", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "ChateauChevalBlanc" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#LaneTanner", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "LaneTanner" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#Mountadam", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "Mountadam" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#SchlossVolrad", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "SchlossVolrad" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#Marietta", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "Marietta" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#PageMillWinery", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "PageMillWinery" + } + } ], + "id" : "97" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#Pasta", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "instances" : 0, + "label" : { + "IRI-based" : "Pasta" + }, + "subClasses" : [ "32", "83" ], + "attributes" : [ "external" ], + "id" : "33", + "superClasses" : [ "49" ] + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#WineGrape", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "instances" : 0, + "label" : { + "IRI-based" : "WineGrape" + }, + "individuals" : [ { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#PinotNoirGrape", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "PinotNoirGrape" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#SauvignonBlancGrape", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "SauvignonBlancGrape" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#SangioveseGrape", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "SangioveseGrape" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#PinotBlancGrape", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "PinotBlancGrape" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#SemillonGrape", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "SemillonGrape" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#MalbecGrape", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "MalbecGrape" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#PetiteSyrahGrape", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "PetiteSyrahGrape" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#CabernetFrancGrape", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "CabernetFrancGrape" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#MerlotGrape", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "MerlotGrape" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#ZinfandelGrape", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "ZinfandelGrape" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#CheninBlancGrape", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "CheninBlancGrape" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#CabernetSauvignonGrape", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "CabernetSauvignonGrape" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#GamayGrape", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "GamayGrape" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#RieslingGrape", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "RieslingGrape" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#PetiteVerdotGrape", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "PetiteVerdotGrape" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#ChardonnayGrape", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "ChardonnayGrape" + } + } ], + "id" : "65", + "superClasses" : [ "76" ] + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#WhiteLoire", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "instances" : 0, + "label" : { + "IRI-based" : "WhiteLoire" + }, + "intersection" : [ "37", "47" ], + "attributes" : [ "intersection" ], + "id" : "98" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#Margaux", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "instances" : 0, + "label" : { + "IRI-based" : "Margaux" + }, + "individuals" : [ { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#ChateauMargaux", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "ChateauMargaux" + } + } ], + "intersection" : [ "86" ], + "attributes" : [ "intersection" ], + "id" : "99" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#NonRedMeat", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "instances" : 0, + "label" : { + "IRI-based" : "NonRedMeat" + }, + "individuals" : [ { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#Pork", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "labels" : { + "IRI-based" : "Pork" + } + } ], + "attributes" : [ "external" ], + "id" : "25", + "superClasses" : [ "26" ] + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#PastaWithRedSauce", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "instances" : 0, + "label" : { + "IRI-based" : "PastaWithRedSauce" + }, + "subClasses" : [ "102", "82" ], + "attributes" : [ "external" ], + "id" : "83", + "superClasses" : [ "33" ] + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#ConsumableThing", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "instances" : 0, + "label" : { + "IRI-based" : "ConsumableThing" + }, + "subClasses" : [ "11", "49", "71", "1" ], + "attributes" : [ "external" ], + "id" : "3" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#SweetFruitCourse", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "instances" : 0, + "label" : { + "IRI-based" : "SweetFruitCourse" + }, + "intersection" : [ "1" ], + "attributes" : [ "intersection", "external" ], + "id" : "103" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#SweetDessert", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "instances" : 0, + "label" : { + "IRI-based" : "SweetDessert" + }, + "individuals" : [ { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#Pie", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "labels" : { + "IRI-based" : "Pie" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#Cake", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "labels" : { + "IRI-based" : "Cake" + } + } ], + "attributes" : [ "external" ], + "id" : "91", + "superClasses" : [ "90" ] + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#WhiteWine", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "instances" : 0, + "label" : { + "IRI-based" : "WhiteWine" + }, + "individuals" : [ { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#StGenevieveTexasWhite", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "StGenevieveTexasWhite" + } + } ], + "intersection" : [ "23" ], + "attributes" : [ "intersection" ], + "id" : "47" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#Merlot", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "instances" : 0, + "label" : { + "IRI-based" : "Merlot" + }, + "individuals" : [ { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#GaryFarrellMerlot", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "GaryFarrellMerlot" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#LongridgeMerlot", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "LongridgeMerlot" + } + } ], + "intersection" : [ "23" ], + "attributes" : [ "intersection" ], + "id" : "104" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#OysterShellfishCourse", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "instances" : 0, + "label" : { + "IRI-based" : "OysterShellfishCourse" + }, + "intersection" : [ "1" ], + "attributes" : [ "intersection", "external" ], + "id" : "105" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#WineColor", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "instances" : 0, + "label" : { + "IRI-based" : "WineColor" + }, + "individuals" : [ { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#White", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "White" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#Red", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "Red" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#Rose", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "Rose" + } + } ], + "id" : "106", + "superClasses" : [ "94" ] + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#DryRiesling", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "instances" : 0, + "label" : { + "IRI-based" : "DryRiesling" + }, + "individuals" : [ { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#MountadamRiesling", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "MountadamRiesling" + } + } ], + "intersection" : [ "72" ], + "attributes" : [ "intersection" ], + "id" : "107" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#NonBlandFish", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "instances" : 0, + "label" : { + "IRI-based" : "NonBlandFish" + }, + "individuals" : [ { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#Tuna", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "labels" : { + "IRI-based" : "Tuna" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#Swordfish", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "labels" : { + "IRI-based" : "Swordfish" + } + } ], + "attributes" : [ "external" ], + "id" : "108", + "superClasses" : [ "109" ] + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#Zinfandel", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "instances" : 0, + "label" : { + "IRI-based" : "Zinfandel" + }, + "individuals" : [ { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#ElyseZinfandel", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "ElyseZinfandel" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#SaucelitoCanyonZinfandel", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "SaucelitoCanyonZinfandel" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#CotturiZinfandel", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "CotturiZinfandel" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#MariettaZinfandel", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "MariettaZinfandel" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#SaucelitoCanyonZinfandel1998", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "SaucelitoCanyonZinfandel1998" + } + } ], + "intersection" : [ "23" ], + "attributes" : [ "intersection" ], + "id" : "110" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#MealCourse", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "instances" : 0, + "label" : { + "IRI-based" : "MealCourse" + }, + "attributes" : [ "external" ], + "id" : "1", + "superClasses" : [ "3" ] + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#TexasWine", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "instances" : 0, + "label" : { + "IRI-based" : "TexasWine" + }, + "intersection" : [ "23" ], + "attributes" : [ "intersection" ], + "id" : "112" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#WineSugar", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "instances" : 0, + "label" : { + "IRI-based" : "WineSugar" + }, + "individuals" : [ { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#Sweet", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "Sweet" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#Dry", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "Dry" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#OffDry", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "OffDry" + } + } ], + "id" : "95", + "superClasses" : [ "93" ] + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#PinotBlanc", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "instances" : 0, + "label" : { + "IRI-based" : "PinotBlanc" + }, + "intersection" : [ "23" ], + "attributes" : [ "intersection" ], + "id" : "113" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#PastaWithSpicyRedSauceCourse", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "instances" : 0, + "label" : { + "IRI-based" : "PastaWithSpicyRedSauceCourse" + }, + "intersection" : [ "1" ], + "attributes" : [ "intersection", "external" ], + "id" : "114" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#WineFlavor", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "instances" : 0, + "label" : { + "IRI-based" : "WineFlavor" + }, + "individuals" : [ { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#Delicate", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "Delicate" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#Moderate", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "Moderate" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#Strong", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "Strong" + } + } ], + "id" : "41", + "superClasses" : [ "93" ] + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#DarkMeatFowl", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "instances" : 0, + "label" : { + "IRI-based" : "DarkMeatFowl" + }, + "individuals" : [ { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#Duck", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "labels" : { + "IRI-based" : "Duck" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#Goose", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "labels" : { + "IRI-based" : "Goose" + } + } ], + "attributes" : [ "external" ], + "id" : "50", + "superClasses" : [ "7" ] + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#DryWhiteWine", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "instances" : 0, + "label" : { + "IRI-based" : "DryWhiteWine" + }, + "intersection" : [ "47", "18" ], + "attributes" : [ "intersection" ], + "id" : "115" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#CotesDOr", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "instances" : 0, + "label" : { + "IRI-based" : "CotesDOr" + }, + "individuals" : [ { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#ClosDeVougeotCotesDOr", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "ClosDeVougeotCotesDOr" + } + } ], + "intersection" : [ "117" ], + "attributes" : [ "intersection" ], + "id" : "116" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#NonOysterShellfish", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "instances" : 0, + "label" : { + "IRI-based" : "NonOysterShellfish" + }, + "individuals" : [ { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#Lobster", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "labels" : { + "IRI-based" : "Lobster" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#Clams", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "labels" : { + "IRI-based" : "Clams" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#Crab", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "labels" : { + "IRI-based" : "Crab" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#Mussels", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "labels" : { + "IRI-based" : "Mussels" + } + } ], + "attributes" : [ "external" ], + "id" : "89", + "superClasses" : [ "15" ] + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#NonBlandFishCourse", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "instances" : 0, + "label" : { + "IRI-based" : "NonBlandFishCourse" + }, + "intersection" : [ "1" ], + "attributes" : [ "intersection", "external" ], + "id" : "118" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#WhiteTableWine", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "instances" : 0, + "label" : { + "IRI-based" : "WhiteTableWine" + }, + "intersection" : [ "30" ], + "attributes" : [ "intersection" ], + "id" : "123" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#Bordeaux", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "instances" : 0, + "label" : { + "IRI-based" : "Bordeaux" + }, + "subClasses" : [ "8" ], + "intersection" : [ "23" ], + "attributes" : [ "intersection" ], + "id" : "9" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#Meursault", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "instances" : 0, + "label" : { + "IRI-based" : "Meursault" + }, + "individuals" : [ { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#ChateauDeMeursaultMeursault", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "ChateauDeMeursaultMeursault" + } + } ], + "intersection" : [ "54" ], + "attributes" : [ "intersection" ], + "id" : "133" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#PastaWithSpicyRedSauce", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "instances" : 0, + "label" : { + "IRI-based" : "PastaWithSpicyRedSauce" + }, + "individuals" : [ { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#FraDiavolo", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "labels" : { + "IRI-based" : "FraDiavolo" + } + } ], + "attributes" : [ "external" ], + "id" : "102", + "superClasses" : [ "83" ] + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#SweetFruit", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "instances" : 0, + "label" : { + "IRI-based" : "SweetFruit" + }, + "individuals" : [ { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#Peaches", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "labels" : { + "IRI-based" : "Peaches" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#Bananas", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "labels" : { + "IRI-based" : "Bananas" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#MixedFruit", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "labels" : { + "IRI-based" : "MixedFruit" + } + } ], + "subClasses" : [ "76" ], + "attributes" : [ "external" ], + "id" : "77", + "superClasses" : [ "49" ] + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#Vintage", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "instances" : 0, + "label" : { + "IRI-based" : "Vintage" + }, + "id" : "63" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#Wine", + "equivalent" : [ "125" ], + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "instances" : 0, + "label" : { + "IRI-based" : "Wine", + "en" : "wine", + "fr" : "vin" + }, + "subClasses" : [ "13", "10", "134" ], + "attributes" : [ "equivalent" ], + "id" : "23", + "superClasses" : [ "71" ] + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#SweetRiesling", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "instances" : 0, + "label" : { + "IRI-based" : "SweetRiesling" + }, + "individuals" : [ { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#SchlossRothermelTrochenbierenausleseRiesling", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "SchlossRothermelTrochenbierenausleseRiesling" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#SchlossVolradTrochenbierenausleseRiesling", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "SchlossVolradTrochenbierenausleseRiesling" + } + } ], + "intersection" : [ "72" ], + "attributes" : [ "intersection" ], + "id" : "87", + "superClasses" : [ "13" ] + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#Gamay", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "instances" : 0, + "label" : { + "IRI-based" : "Gamay" + }, + "intersection" : [ "23" ], + "attributes" : [ "intersection" ], + "id" : "136" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#WineBody", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "instances" : 0, + "label" : { + "IRI-based" : "WineBody" + }, + "individuals" : [ { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#Light", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "Light" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#Medium", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "Medium" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#Full", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "Full" + } + } ], + "id" : "96", + "superClasses" : [ "93" ] + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#TableWine", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "instances" : 0, + "label" : { + "IRI-based" : "TableWine" + }, + "intersection" : [ "23" ], + "attributes" : [ "intersection" ], + "id" : "30" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#Tours", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "instances" : 0, + "label" : { + "IRI-based" : "Tours" + }, + "intersection" : [ "37" ], + "attributes" : [ "intersection" ], + "id" : "151" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#AlsatianWine", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "instances" : 0, + "label" : { + "IRI-based" : "AlsatianWine" + }, + "intersection" : [ "23" ], + "attributes" : [ "intersection" ], + "id" : "154" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#PastaWithLightCreamCourse", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "instances" : 0, + "label" : { + "IRI-based" : "PastaWithLightCreamCourse" + }, + "intersection" : [ "1" ], + "attributes" : [ "intersection", "external" ], + "id" : "155" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#RedBurgundy", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "instances" : 0, + "label" : { + "IRI-based" : "RedBurgundy" + }, + "intersection" : [ "55", "17" ], + "attributes" : [ "intersection" ], + "id" : "117" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#EdibleThing", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "instances" : 0, + "label" : { + "IRI-based" : "EdibleThing" + }, + "subClasses" : [ "90", "7", "26", "77", "88", "33", "138", "144" ], + "attributes" : [ "external" ], + "id" : "49", + "superClasses" : [ "3" ] + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#Medoc", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "instances" : 0, + "label" : { + "IRI-based" : "Medoc" + }, + "intersection" : [ "9" ], + "attributes" : [ "intersection" ], + "id" : "86" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#Juice", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "instances" : 0, + "label" : { + "IRI-based" : "Juice" + }, + "attributes" : [ "external" ], + "id" : "79", + "superClasses" : [ "71" ] + }, { + "iri" : "http://www.w3.org/2002/07/owl#Thing", + "baseIri" : "http://owl2vowl.de", + "id" : "40", + "label" : { + "undefined" : "Thing" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#CheninBlanc", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "instances" : 0, + "label" : { + "IRI-based" : "CheninBlanc" + }, + "individuals" : [ { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#VentanaCheninBlanc", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "VentanaCheninBlanc" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#FoxenCheninBlanc", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "FoxenCheninBlanc" + } + } ], + "intersection" : [ "23" ], + "attributes" : [ "intersection" ], + "id" : "156" + }, { + "iri" : "http://www.w3.org/2002/07/owl#Thing", + "baseIri" : "http://owl2vowl.de", + "id" : "101", + "label" : { + "undefined" : "Thing" + } + }, { + "iri" : "http://www.w3.org/2002/07/owl#Thing", + "baseIri" : "http://owl2vowl.de", + "id" : "74", + "label" : { + "undefined" : "Thing" + } + }, { + "iri" : "http://www.w3.org/2001/XMLSchema#positiveInteger", + "baseIri" : "http://www.w3.org/2001/XMLSchema", + "id" : "158", + "label" : { + "IRI-based" : "positiveInteger" + } + }, { + "iri" : "http://www.w3.org/2002/07/owl#Thing", + "baseIri" : "http://owl2vowl.de", + "id" : "81", + "label" : { + "undefined" : "Thing" + } + }, { + "iri" : "http://www.w3.org/2002/07/owl#Thing", + "baseIri" : "http://owl2vowl.de", + "id" : "120", + "label" : { + "undefined" : "Thing" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#WhiteBordeaux", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "instances" : 0, + "label" : { + "IRI-based" : "WhiteBordeaux" + }, + "intersection" : [ "9", "47" ], + "attributes" : [ "intersection" ], + "id" : "160" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#Fish", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "instances" : 0, + "label" : { + "IRI-based" : "Fish" + }, + "subClasses" : [ "163", "108" ], + "attributes" : [ "external" ], + "id" : "109", + "superClasses" : [ "88" ] + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#Seafood", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "instances" : 0, + "label" : { + "IRI-based" : "Seafood" + }, + "subClasses" : [ "109", "15" ], + "attributes" : [ "external" ], + "id" : "88", + "superClasses" : [ "49" ] + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#CheeseNutsDessertCourse", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "instances" : 0, + "label" : { + "IRI-based" : "CheeseNutsDessertCourse" + }, + "intersection" : [ "1" ], + "attributes" : [ "intersection", "external" ], + "id" : "165" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#NonSpicyRedMeatCourse", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "instances" : 0, + "label" : { + "IRI-based" : "NonSpicyRedMeatCourse" + }, + "intersection" : [ "1" ], + "attributes" : [ "intersection", "external" ], + "id" : "167" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#DessertCourse", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "instances" : 0, + "label" : { + "IRI-based" : "DessertCourse" + }, + "intersection" : [ "1" ], + "attributes" : [ "intersection", "external" ], + "id" : "168" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#Muscadet", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "instances" : 0, + "label" : { + "IRI-based" : "Muscadet" + }, + "individuals" : [ { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#SevreEtMaineMuscadet", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "SevreEtMaineMuscadet" + } + } ], + "intersection" : [ "37" ], + "attributes" : [ "intersection" ], + "id" : "170" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#RoseWine", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "instances" : 0, + "label" : { + "IRI-based" : "RoseWine" + }, + "intersection" : [ "23" ], + "attributes" : [ "intersection" ], + "id" : "171" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#OtherTomatoBasedFoodCourse", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "instances" : 0, + "label" : { + "IRI-based" : "OtherTomatoBasedFoodCourse" + }, + "intersection" : [ "1" ], + "attributes" : [ "intersection", "external" ], + "id" : "176" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#LateHarvest", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "instances" : 0, + "label" : { + "IRI-based" : "LateHarvest" + }, + "subClasses" : [ "8" ], + "id" : "10", + "superClasses" : [ "23" ] + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#OtherTomatoBasedFood", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "instances" : 0, + "label" : { + "IRI-based" : "OtherTomatoBasedFood" + }, + "individuals" : [ { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#Pizza", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "labels" : { + "IRI-based" : "Pizza" + } + } ], + "attributes" : [ "external" ], + "id" : "138", + "superClasses" : [ "49" ] + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#EarlyHarvest", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "instances" : 0, + "label" : { + "IRI-based" : "EarlyHarvest" + }, + "id" : "134", + "superClasses" : [ "23" ] + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#ItalianWine", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "instances" : 0, + "label" : { + "IRI-based" : "ItalianWine" + }, + "subClasses" : [ "187" ], + "intersection" : [ "23" ], + "attributes" : [ "intersection" ], + "id" : "186" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#RedWine", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "instances" : 0, + "label" : { + "IRI-based" : "RedWine" + }, + "subClasses" : [ "84" ], + "intersection" : [ "23" ], + "attributes" : [ "intersection" ], + "id" : "17" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#DarkMeatFowlCourse", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "instances" : 0, + "label" : { + "IRI-based" : "DarkMeatFowlCourse" + }, + "intersection" : [ "1" ], + "attributes" : [ "intersection", "external" ], + "id" : "188" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#NonSpicyRedMeat", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "instances" : 0, + "label" : { + "IRI-based" : "NonSpicyRedMeat" + }, + "individuals" : [ { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#RoastBeef", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "labels" : { + "IRI-based" : "RoastBeef" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#Veal", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "labels" : { + "IRI-based" : "Veal" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#Steak", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "labels" : { + "IRI-based" : "Steak" + } + } ], + "attributes" : [ "external" ], + "id" : "44", + "superClasses" : [ "28" ] + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#RedMeatCourse", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "instances" : 0, + "label" : { + "IRI-based" : "RedMeatCourse" + }, + "intersection" : [ "1" ], + "attributes" : [ "intersection", "external" ], + "id" : "199" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#CheeseNutsDessert", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "instances" : 0, + "label" : { + "IRI-based" : "CheeseNutsDessert" + }, + "individuals" : [ { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#Nuts", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "labels" : { + "IRI-based" : "Nuts" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#Cheese", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "labels" : { + "IRI-based" : "Cheese" + } + } ], + "attributes" : [ "external" ], + "id" : "92", + "superClasses" : [ "90" ] + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#EatingGrape", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "instances" : 0, + "label" : { + "IRI-based" : "EatingGrape" + }, + "individuals" : [ { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#ThompsonSeedless", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "labels" : { + "IRI-based" : "ThompsonSeedless" + } + } ], + "attributes" : [ "external" ], + "id" : "78", + "superClasses" : [ "76" ] + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#PetiteSyrah", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "instances" : 0, + "label" : { + "IRI-based" : "PetiteSyrah" + }, + "individuals" : [ { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#SeanThackreySiriusPetiteSyrah", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "SeanThackreySiriusPetiteSyrah" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#MariettaPetiteSyrah", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "MariettaPetiteSyrah" + } + } ], + "intersection" : [ "23" ], + "attributes" : [ "intersection" ], + "id" : "200" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#SeafoodCourse", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "instances" : 0, + "label" : { + "IRI-based" : "SeafoodCourse" + }, + "intersection" : [ "1" ], + "attributes" : [ "intersection", "external" ], + "id" : "201" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#BlandFish", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "instances" : 0, + "label" : { + "IRI-based" : "BlandFish" + }, + "individuals" : [ { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#Flounder", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "labels" : { + "IRI-based" : "Flounder" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#Scrod", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "labels" : { + "IRI-based" : "Scrod" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#Halibut", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "labels" : { + "IRI-based" : "Halibut" + } + } ], + "attributes" : [ "external" ], + "id" : "163", + "superClasses" : [ "109" ] + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#SpicyRedMeatCourse", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "instances" : 0, + "label" : { + "IRI-based" : "SpicyRedMeatCourse" + }, + "intersection" : [ "1" ], + "attributes" : [ "intersection", "external" ], + "id" : "210" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#Sancerre", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "instances" : 0, + "label" : { + "IRI-based" : "Sancerre" + }, + "individuals" : [ { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#ClosDeLaPoussieSancerre", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "ClosDeLaPoussieSancerre" + } + } ], + "intersection" : [ "37" ], + "attributes" : [ "intersection" ], + "id" : "220" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#Wine", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "instances" : 0, + "label" : { + "IRI-based" : "Wine" + }, + "attributes" : [ "external", "equivalent" ], + "id" : "125" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#PastaWithHeavyCreamCourse", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "instances" : 0, + "label" : { + "IRI-based" : "PastaWithHeavyCreamCourse" + }, + "intersection" : [ "1" ], + "attributes" : [ "intersection", "external" ], + "id" : "226" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#WineDescriptor", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "instances" : 0, + "label" : { + "IRI-based" : "WineDescriptor" + }, + "union" : [ "93", "106" ], + "subClasses" : [ "93", "106" ], + "comment" : { + "undefined" : "Made WineDescriptor unionType of tastes and color" + }, + "attributes" : [ "union" ], + "id" : "94" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#FruitCourse", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "instances" : 0, + "label" : { + "IRI-based" : "FruitCourse" + }, + "intersection" : [ "1" ], + "attributes" : [ "intersection", "external" ], + "id" : "229" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#Fruit", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "instances" : 0, + "label" : { + "IRI-based" : "Fruit" + }, + "union" : [ "77", "144" ], + "attributes" : [ "external", "union" ], + "id" : "4" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#PastaWithHeavyCreamSauce", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "instances" : 0, + "label" : { + "IRI-based" : "PastaWithHeavyCreamSauce" + }, + "individuals" : [ { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#FettucineAlfRedo", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "labels" : { + "IRI-based" : "FettucineAlfRedo" + } + } ], + "attributes" : [ "external" ], + "id" : "35", + "superClasses" : [ "32" ] + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#Beaujolais", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "instances" : 0, + "label" : { + "IRI-based" : "Beaujolais" + }, + "individuals" : [ { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#ChateauMorgonBeaujolais", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "ChateauMorgonBeaujolais" + } + } ], + "intersection" : [ "23" ], + "attributes" : [ "intersection" ], + "id" : "232" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#NonOysterShellfishCourse", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "instances" : 0, + "label" : { + "IRI-based" : "NonOysterShellfishCourse" + }, + "intersection" : [ "1" ], + "attributes" : [ "intersection", "external" ], + "id" : "234" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#NonSweetFruitCourse", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "instances" : 0, + "label" : { + "IRI-based" : "NonSweetFruitCourse" + }, + "intersection" : [ "1" ], + "attributes" : [ "intersection", "external" ], + "id" : "237" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#PinotNoir", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "instances" : 0, + "label" : { + "IRI-based" : "PinotNoir" + }, + "individuals" : [ { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#LaneTannerPinotNoir", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "LaneTannerPinotNoir" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#MountadamPinotNoir", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "MountadamPinotNoir" + } + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#MountEdenVineyardEstatePinotNoir", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "MountEdenVineyardEstatePinotNoir" + } + } ], + "intersection" : [ "23" ], + "attributes" : [ "intersection" ], + "id" : "240" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#Meat", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "instances" : 0, + "label" : { + "IRI-based" : "Meat" + }, + "subClasses" : [ "28", "25" ], + "attributes" : [ "external" ], + "id" : "26", + "superClasses" : [ "49" ] + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#CabernetFranc", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "instances" : 0, + "label" : { + "IRI-based" : "CabernetFranc" + }, + "individuals" : [ { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#WhitehallLaneCabernetFranc", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "WhitehallLaneCabernetFranc" + } + } ], + "intersection" : [ "23" ], + "attributes" : [ "intersection" ], + "id" : "245" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#NonSweetFruit", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "instances" : 0, + "label" : { + "IRI-based" : "NonSweetFruit" + }, + "attributes" : [ "external" ], + "id" : "144", + "superClasses" : [ "49" ] + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#Chianti", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "instances" : 0, + "label" : { + "IRI-based" : "Chianti" + }, + "individuals" : [ { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#ChiantiClassico", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "labels" : { + "IRI-based" : "ChiantiClassico" + } + } ], + "id" : "187", + "superClasses" : [ "186" ] + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#AmericanWine", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "instances" : 0, + "label" : { + "IRI-based" : "AmericanWine" + }, + "intersection" : [ "23" ], + "attributes" : [ "intersection" ], + "id" : "246" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#NonRedMeatCourse", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "instances" : 0, + "label" : { + "IRI-based" : "NonRedMeatCourse" + }, + "intersection" : [ "1" ], + "attributes" : [ "intersection", "external" ], + "id" : "247" + } ], + "property" : [ { + "id" : "2", + "type" : "owl:objectProperty" + }, { + "id" : "24", + "type" : "rdfs:SubClassOf" + }, { + "id" : "27", + "type" : "rdfs:SubClassOf" + }, { + "id" : "39", + "type" : "owl:objectProperty" + }, { + "id" : "62", + "type" : "owl:objectProperty" + }, { + "id" : "64", + "type" : "owl:objectProperty" + }, { + "id" : "70", + "type" : "owl:objectProperty" + }, { + "id" : "73", + "type" : "owl:objectProperty" + }, { + "id" : "80", + "type" : "owl:objectProperty" + }, { + "id" : "100", + "type" : "owl:objectProperty" + }, { + "id" : "111", + "type" : "owl:disjointWith" + }, { + "id" : "119", + "type" : "owl:objectProperty" + }, { + "id" : "121", + "type" : "owl:disjointWith" + }, { + "id" : "122", + "type" : "owl:disjointWith" + }, { + "id" : "124", + "type" : "owl:allValuesFrom" + }, { + "id" : "126", + "type" : "owl:disjointWith" + }, { + "id" : "127", + "type" : "owl:disjointWith" + }, { + "id" : "128", + "type" : "owl:disjointWith" + }, { + "id" : "129", + "type" : "owl:allValuesFrom" + }, { + "id" : "130", + "type" : "owl:disjointWith" + }, { + "id" : "131", + "type" : "owl:disjointWith" + }, { + "id" : "132", + "type" : "owl:disjointWith" + }, { + "id" : "42", + "type" : "owl:objectProperty" + }, { + "id" : "137", + "type" : "owl:disjointWith" + }, { + "id" : "139", + "type" : "owl:disjointWith" + }, { + "id" : "140", + "type" : "owl:objectProperty" + }, { + "id" : "141", + "type" : "owl:disjointWith" + }, { + "id" : "142", + "type" : "owl:disjointWith" + }, { + "id" : "143", + "type" : "owl:disjointWith" + }, { + "id" : "145", + "type" : "owl:disjointWith" + }, { + "id" : "135", + "type" : "owl:objectProperty" + }, { + "id" : "146", + "type" : "owl:disjointWith" + }, { + "id" : "147", + "type" : "owl:disjointWith" + }, { + "id" : "148", + "type" : "owl:disjointWith" + }, { + "id" : "149", + "type" : "owl:disjointWith" + }, { + "id" : "150", + "type" : "rdfs:SubClassOf" + }, { + "id" : "152", + "type" : "rdfs:SubClassOf" + }, { + "id" : "153", + "type" : "rdfs:SubClassOf" + }, { + "id" : "157", + "type" : "rdfs:SubClassOf" + }, { + "id" : "159", + "type" : "owl:disjointWith" + }, { + "id" : "161", + "type" : "owl:disjointWith" + }, { + "id" : "162", + "type" : "owl:allValuesFrom" + }, { + "id" : "164", + "type" : "owl:objectProperty" + }, { + "id" : "166", + "type" : "owl:datatypeProperty" + }, { + "id" : "169", + "type" : "owl:someValuesFrom" + }, { + "id" : "172", + "type" : "owl:disjointWith" + }, { + "id" : "173", + "type" : "owl:disjointWith" + }, { + "id" : "174", + "type" : "owl:disjointWith" + }, { + "id" : "175", + "type" : "owl:disjointWith" + }, { + "id" : "177", + "type" : "owl:disjointWith" + }, { + "id" : "178", + "type" : "owl:disjointWith" + }, { + "id" : "179", + "type" : "owl:disjointWith" + }, { + "id" : "180", + "type" : "owl:disjointWith" + }, { + "id" : "181", + "type" : "rdfs:SubClassOf" + }, { + "id" : "182", + "type" : "rdfs:SubClassOf" + }, { + "id" : "183", + "type" : "rdfs:SubClassOf" + }, { + "id" : "184", + "type" : "rdfs:SubClassOf" + }, { + "id" : "185", + "type" : "rdfs:SubClassOf" + }, { + "id" : "189", + "type" : "rdfs:SubClassOf" + }, { + "id" : "190", + "type" : "rdfs:SubClassOf" + }, { + "id" : "191", + "type" : "rdfs:SubClassOf" + }, { + "id" : "192", + "type" : "rdfs:SubClassOf" + }, { + "id" : "193", + "type" : "rdfs:SubClassOf" + }, { + "id" : "194", + "type" : "rdfs:SubClassOf" + }, { + "id" : "195", + "type" : "rdfs:SubClassOf" + }, { + "id" : "196", + "type" : "rdfs:SubClassOf" + }, { + "id" : "197", + "type" : "rdfs:SubClassOf" + }, { + "id" : "198", + "type" : "rdfs:SubClassOf" + }, { + "id" : "202", + "type" : "rdfs:SubClassOf" + }, { + "id" : "203", + "type" : "rdfs:SubClassOf" + }, { + "id" : "204", + "type" : "rdfs:SubClassOf" + }, { + "id" : "205", + "type" : "rdfs:SubClassOf" + }, { + "id" : "206", + "type" : "rdfs:SubClassOf" + }, { + "id" : "207", + "type" : "rdfs:SubClassOf" + }, { + "id" : "208", + "type" : "rdfs:SubClassOf" + }, { + "id" : "209", + "type" : "rdfs:SubClassOf" + }, { + "id" : "211", + "type" : "rdfs:SubClassOf" + }, { + "id" : "212", + "type" : "rdfs:SubClassOf" + }, { + "id" : "213", + "type" : "rdfs:SubClassOf" + }, { + "id" : "214", + "type" : "rdfs:SubClassOf" + }, { + "id" : "215", + "type" : "rdfs:SubClassOf" + }, { + "id" : "216", + "type" : "rdfs:SubClassOf" + }, { + "id" : "217", + "type" : "owl:disjointWith" + }, { + "id" : "218", + "type" : "owl:disjointWith" + }, { + "id" : "219", + "type" : "owl:disjointWith" + }, { + "id" : "221", + "type" : "owl:disjointWith" + }, { + "id" : "222", + "type" : "owl:disjointWith" + }, { + "id" : "223", + "type" : "owl:disjointWith" + }, { + "id" : "224", + "type" : "owl:disjointWith" + }, { + "id" : "225", + "type" : "owl:disjointWith" + }, { + "id" : "227", + "type" : "owl:disjointWith" + }, { + "id" : "228", + "type" : "owl:disjointWith" + }, { + "id" : "230", + "type" : "rdfs:SubClassOf" + }, { + "id" : "231", + "type" : "rdfs:SubClassOf" + }, { + "id" : "233", + "type" : "rdfs:SubClassOf" + }, { + "id" : "235", + "type" : "rdfs:SubClassOf" + }, { + "id" : "236", + "type" : "rdfs:SubClassOf" + }, { + "id" : "238", + "type" : "rdfs:SubClassOf" + }, { + "id" : "239", + "type" : "rdfs:SubClassOf" + }, { + "id" : "241", + "type" : "rdfs:SubClassOf" + }, { + "id" : "242", + "type" : "owl:objectProperty" + }, { + "id" : "243", + "type" : "rdfs:SubClassOf" + }, { + "id" : "244", + "type" : "rdfs:SubClassOf" + }, { + "id" : "5", + "type" : "owl:objectProperty" + }, { + "id" : "248", + "type" : "rdfs:SubClassOf" + }, { + "id" : "249", + "type" : "rdfs:SubClassOf" + }, { + "id" : "250", + "type" : "rdfs:SubClassOf" + }, { + "id" : "251", + "type" : "rdfs:SubClassOf" + }, { + "id" : "252", + "type" : "rdfs:SubClassOf" + } ], + "propertyAttribute" : [ { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#madeFromFruit", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "range" : "4", + "label" : { + "IRI-based" : "madeFromFruit" + }, + "minCardinality" : "1", + "domain" : "3", + "subproperty" : [ "5" ], + "attributes" : [ "object", "external" ], + "id" : "2" + }, { + "range" : "26", + "domain" : "25", + "attributes" : [ "anonymous", "object" ], + "id" : "24" + }, { + "range" : "26", + "domain" : "28", + "attributes" : [ "anonymous", "object" ], + "id" : "27" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#hasFlavor", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "range" : "41", + "label" : { + "IRI-based" : "hasFlavor" + }, + "superproperty" : [ "42" ], + "cardinality" : "1", + "domain" : "40", + "attributes" : [ "functional", "object" ], + "id" : "39" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#hasVintageYear", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "range" : "38", + "label" : { + "IRI-based" : "hasVintageYear" + }, + "cardinality" : "1", + "domain" : "63", + "attributes" : [ "functional", "object" ], + "id" : "62" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#madeIntoWine", + "inverse" : "5", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "range" : "23", + "label" : { + "IRI-based" : "madeIntoWine" + }, + "domain" : "65", + "attributes" : [ "object" ], + "id" : "64" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#hasDrink", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "range" : "71", + "label" : { + "IRI-based" : "hasDrink" + }, + "minCardinality" : "1", + "domain" : "1", + "attributes" : [ "object", "external" ], + "id" : "70" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#producesWine", + "inverse" : "75", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "range" : "74", + "label" : { + "IRI-based" : "producesWine" + }, + "domain" : "74", + "attributes" : [ "object" ], + "id" : "73" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#locatedIn", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "range" : "58", + "label" : { + "IRI-based" : "locatedIn" + }, + "domain" : "81", + "attributes" : [ "transitive", "object" ], + "id" : "80" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#hasSugar", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "range" : "95", + "label" : { + "IRI-based" : "hasSugar" + }, + "superproperty" : [ "42" ], + "cardinality" : "1", + "domain" : "101", + "attributes" : [ "functional", "object" ], + "id" : "100" + }, { + "range" : "88", + "domain" : "26", + "attributes" : [ "anonymous", "object" ], + "id" : "111" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#hasBody", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "range" : "96", + "label" : { + "IRI-based" : "hasBody" + }, + "superproperty" : [ "42" ], + "cardinality" : "1", + "domain" : "120", + "attributes" : [ "functional", "object" ], + "id" : "119" + }, { + "range" : "26", + "domain" : "7", + "attributes" : [ "anonymous", "object" ], + "id" : "121" + }, { + "range" : "26", + "domain" : "4", + "attributes" : [ "anonymous", "object" ], + "id" : "122" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#hasDrink", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "range" : "125", + "label" : { + "IRI-based" : "hasDrink" + }, + "domain" : "1", + "attributes" : [ "object", "external", "allValues" ], + "id" : "124" + }, { + "range" : "43", + "domain" : "44", + "attributes" : [ "anonymous", "object" ], + "id" : "126" + }, { + "range" : "33", + "domain" : "26", + "attributes" : [ "anonymous", "object" ], + "id" : "127" + }, { + "range" : "6", + "domain" : "50", + "attributes" : [ "anonymous", "object" ], + "id" : "128" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#course", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "range" : "1", + "label" : { + "IRI-based" : "course" + }, + "domain" : "11", + "attributes" : [ "object", "external", "allValues" ], + "id" : "129" + }, { + "range" : "1", + "domain" : "11", + "attributes" : [ "anonymous", "object" ], + "id" : "130" + }, { + "range" : "89", + "domain" : "14", + "attributes" : [ "anonymous", "object" ], + "id" : "131" + }, { + "range" : "92", + "domain" : "91", + "attributes" : [ "anonymous", "object" ], + "id" : "132" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#hasWineDescriptor", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "range" : "94", + "label" : { + "IRI-based" : "hasWineDescriptor" + }, + "domain" : "23", + "subproperty" : [ "119", "100", "135", "39" ], + "attributes" : [ "object" ], + "id" : "42" + }, { + "range" : "138", + "domain" : "88", + "attributes" : [ "anonymous", "object" ], + "id" : "137" + }, { + "range" : "138", + "domain" : "7", + "attributes" : [ "anonymous", "object" ], + "id" : "139" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#course", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "range" : "1", + "label" : { + "IRI-based" : "course" + }, + "minCardinality" : "1", + "domain" : "11", + "attributes" : [ "object", "external" ], + "id" : "140" + }, { + "range" : "33", + "domain" : "138", + "attributes" : [ "anonymous", "object" ], + "id" : "141" + }, { + "range" : "134", + "domain" : "10", + "attributes" : [ "anonymous", "object" ], + "id" : "142" + }, { + "range" : "144", + "domain" : "77", + "attributes" : [ "anonymous", "object" ], + "id" : "143" + }, { + "range" : "138", + "domain" : "26", + "attributes" : [ "anonymous", "object" ], + "id" : "145" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#hasColor", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "range" : "106", + "label" : { + "IRI-based" : "hasColor" + }, + "superproperty" : [ "42" ], + "cardinality" : "1", + "domain" : "23", + "attributes" : [ "functional", "object" ], + "id" : "135" + }, { + "range" : "138", + "domain" : "4", + "attributes" : [ "anonymous", "object" ], + "id" : "146" + }, { + "range" : "71", + "domain" : "11", + "attributes" : [ "anonymous", "object" ], + "id" : "147" + }, { + "range" : "25", + "domain" : "28", + "attributes" : [ "anonymous", "object" ], + "id" : "148" + }, { + "range" : "71", + "domain" : "1", + "attributes" : [ "anonymous", "object" ], + "id" : "149" + }, { + "range" : "32", + "domain" : "35", + "attributes" : [ "anonymous", "object" ], + "id" : "150" + }, { + "range" : "28", + "domain" : "44", + "attributes" : [ "anonymous", "object" ], + "id" : "152" + }, { + "range" : "28", + "domain" : "43", + "attributes" : [ "anonymous", "object" ], + "id" : "153" + }, { + "range" : "32", + "domain" : "34", + "attributes" : [ "anonymous", "object" ], + "id" : "157" + }, { + "range" : "15", + "domain" : "109", + "attributes" : [ "anonymous", "object" ], + "id" : "159" + }, { + "range" : "88", + "domain" : "7", + "attributes" : [ "anonymous", "object" ], + "id" : "161" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#hasMaker", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "range" : "97", + "label" : { + "IRI-based" : "hasMaker" + }, + "domain" : "23", + "attributes" : [ "functional", "object", "allValues" ], + "id" : "162" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#hasFood", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food", + "range" : "49", + "label" : { + "IRI-based" : "hasFood" + }, + "minCardinality" : "1", + "domain" : "1", + "attributes" : [ "object", "external" ], + "id" : "164" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#yearValue", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "range" : "158", + "label" : { + "IRI-based" : "yearValue" + }, + "domain" : "38", + "attributes" : [ "datatype" ], + "id" : "166" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#locatedIn", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "range" : "58", + "label" : { + "IRI-based" : "locatedIn" + }, + "domain" : "23", + "attributes" : [ "someValues", "transitive", "object" ], + "id" : "169" + }, { + "range" : "33", + "domain" : "88", + "attributes" : [ "anonymous", "object" ], + "id" : "172" + }, { + "range" : "33", + "domain" : "7", + "attributes" : [ "anonymous", "object" ], + "id" : "173" + }, { + "range" : "82", + "domain" : "102", + "attributes" : [ "anonymous", "object" ], + "id" : "174" + }, { + "range" : "35", + "domain" : "34", + "attributes" : [ "anonymous", "object" ], + "id" : "175" + }, { + "range" : "88", + "domain" : "4", + "attributes" : [ "anonymous", "object" ], + "id" : "177" + }, { + "range" : "83", + "domain" : "32", + "attributes" : [ "anonymous", "object" ], + "id" : "178" + }, { + "range" : "33", + "domain" : "4", + "attributes" : [ "anonymous", "object" ], + "id" : "179" + }, { + "range" : "4", + "domain" : "7", + "attributes" : [ "anonymous", "object" ], + "id" : "180" + }, { + "range" : "3", + "domain" : "49", + "attributes" : [ "anonymous", "object" ], + "id" : "181" + }, { + "range" : "3", + "domain" : "11", + "attributes" : [ "anonymous", "object" ], + "id" : "182" + }, { + "range" : "3", + "domain" : "1", + "attributes" : [ "anonymous", "object" ], + "id" : "183" + }, { + "range" : "3", + "domain" : "71", + "attributes" : [ "anonymous", "object" ], + "id" : "184" + }, { + "range" : "83", + "domain" : "82", + "attributes" : [ "anonymous", "object" ], + "id" : "185" + }, { + "range" : "83", + "domain" : "102", + "attributes" : [ "anonymous", "object" ], + "id" : "189" + }, { + "range" : "33", + "domain" : "83", + "attributes" : [ "anonymous", "object" ], + "id" : "190" + }, { + "range" : "93", + "domain" : "95", + "attributes" : [ "anonymous", "object" ], + "id" : "191" + }, { + "range" : "93", + "domain" : "41", + "attributes" : [ "anonymous", "object" ], + "id" : "192" + }, { + "range" : "33", + "domain" : "32", + "attributes" : [ "anonymous", "object" ], + "id" : "193" + }, { + "range" : "93", + "domain" : "96", + "attributes" : [ "anonymous", "object" ], + "id" : "194" + }, { + "range" : "15", + "domain" : "89", + "attributes" : [ "anonymous", "object" ], + "id" : "195" + }, { + "range" : "15", + "domain" : "14", + "attributes" : [ "anonymous", "object" ], + "id" : "196" + }, { + "range" : "90", + "domain" : "92", + "attributes" : [ "anonymous", "object" ], + "id" : "197" + }, { + "range" : "90", + "domain" : "91", + "attributes" : [ "anonymous", "object" ], + "id" : "198" + }, { + "range" : "71", + "domain" : "23", + "attributes" : [ "anonymous", "object" ], + "id" : "202" + }, { + "range" : "71", + "domain" : "79", + "attributes" : [ "anonymous", "object" ], + "id" : "203" + }, { + "range" : "13", + "domain" : "87", + "attributes" : [ "anonymous", "object" ], + "id" : "204" + }, { + "range" : "7", + "domain" : "6", + "attributes" : [ "anonymous", "object" ], + "id" : "205" + }, { + "range" : "7", + "domain" : "50", + "attributes" : [ "anonymous", "object" ], + "id" : "206" + }, { + "range" : "76", + "domain" : "65", + "attributes" : [ "anonymous", "object" ], + "id" : "207" + }, { + "range" : "76", + "domain" : "78", + "attributes" : [ "anonymous", "object" ], + "id" : "208" + }, { + "range" : "17", + "domain" : "84", + "attributes" : [ "anonymous", "object" ], + "id" : "209" + }, { + "range" : "186", + "domain" : "187", + "attributes" : [ "anonymous", "object" ], + "id" : "211" + }, { + "range" : "94", + "domain" : "106", + "attributes" : [ "anonymous", "object" ], + "id" : "212" + }, { + "range" : "94", + "domain" : "93", + "attributes" : [ "anonymous", "object" ], + "id" : "213" + }, { + "range" : "88", + "domain" : "109", + "attributes" : [ "anonymous", "object" ], + "id" : "214" + }, { + "range" : "10", + "domain" : "8", + "attributes" : [ "anonymous", "object" ], + "id" : "215" + }, { + "range" : "88", + "domain" : "15", + "attributes" : [ "anonymous", "object" ], + "id" : "216" + }, { + "range" : "26", + "domain" : "90", + "attributes" : [ "anonymous", "object" ], + "id" : "217" + }, { + "range" : "88", + "domain" : "90", + "attributes" : [ "anonymous", "object" ], + "id" : "218" + }, { + "range" : "4", + "domain" : "90", + "attributes" : [ "anonymous", "object" ], + "id" : "219" + }, { + "range" : "138", + "domain" : "90", + "attributes" : [ "anonymous", "object" ], + "id" : "221" + }, { + "range" : "71", + "domain" : "49", + "attributes" : [ "anonymous", "object" ], + "id" : "222" + }, { + "range" : "49", + "domain" : "1", + "attributes" : [ "anonymous", "object" ], + "id" : "223" + }, { + "range" : "49", + "domain" : "11", + "attributes" : [ "anonymous", "object" ], + "id" : "224" + }, { + "range" : "108", + "domain" : "163", + "attributes" : [ "anonymous", "object" ], + "id" : "225" + }, { + "range" : "33", + "domain" : "90", + "attributes" : [ "anonymous", "object" ], + "id" : "227" + }, { + "range" : "90", + "domain" : "7", + "attributes" : [ "anonymous", "object" ], + "id" : "228" + }, { + "range" : "49", + "domain" : "144", + "attributes" : [ "anonymous", "object" ], + "id" : "230" + }, { + "range" : "49", + "domain" : "138", + "attributes" : [ "anonymous", "object" ], + "id" : "231" + }, { + "range" : "109", + "domain" : "108", + "attributes" : [ "anonymous", "object" ], + "id" : "233" + }, { + "range" : "109", + "domain" : "163", + "attributes" : [ "anonymous", "object" ], + "id" : "235" + }, { + "range" : "49", + "domain" : "77", + "attributes" : [ "anonymous", "object" ], + "id" : "236" + }, { + "range" : "49", + "domain" : "26", + "attributes" : [ "anonymous", "object" ], + "id" : "238" + }, { + "range" : "49", + "domain" : "33", + "attributes" : [ "anonymous", "object" ], + "id" : "239" + }, { + "range" : "49", + "domain" : "88", + "attributes" : [ "anonymous", "object" ], + "id" : "241" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#adjacentRegion", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "range" : "58", + "label" : { + "IRI-based" : "adjacentRegion" + }, + "domain" : "58", + "attributes" : [ "symmetric", "object" ], + "id" : "242" + }, { + "range" : "49", + "domain" : "7", + "attributes" : [ "anonymous", "object" ], + "id" : "243" + }, { + "range" : "49", + "domain" : "90", + "attributes" : [ "anonymous", "object" ], + "id" : "244" + }, { + "iri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#madeFromGrape", + "baseIri" : "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine", + "range" : "65", + "label" : { + "IRI-based" : "madeFromGrape" + }, + "superproperty" : [ "2" ], + "maxCardinality" : "1", + "minCardinality" : "1", + "domain" : "23", + "attributes" : [ "object" ], + "id" : "5" + }, { + "range" : "23", + "domain" : "134", + "attributes" : [ "anonymous", "object" ], + "id" : "248" + }, { + "range" : "77", + "domain" : "76", + "attributes" : [ "anonymous", "object" ], + "id" : "249" + }, { + "range" : "9", + "domain" : "8", + "attributes" : [ "anonymous", "object" ], + "id" : "250" + }, { + "range" : "23", + "domain" : "10", + "attributes" : [ "anonymous", "object" ], + "id" : "251" + }, { + "range" : "23", + "domain" : "13", + "attributes" : [ "anonymous", "object" ], + "id" : "252" + } ] +} \ No newline at end of file diff --git a/webvowl/favicon.ico b/webvowl/favicon.ico new file mode 100644 index 0000000..a857d51 Binary files /dev/null and b/webvowl/favicon.ico differ diff --git a/webvowl/index.html b/webvowl/index.html new file mode 100644 index 0000000..06a8f47 --- /dev/null +++ b/webvowl/index.html @@ -0,0 +1,509 @@ + + + + + + + + + + + + + + + WebVOWL + + + +
+
+ + + + + + + +
+ + + + + +
+ +
+ + +
+ +
+
>
+ +
+ +
+ + +
+
+
+

+

+

+

+

-

+
+
+ + +
+
+
+
+ + + + +
+ + + + + + + \ No newline at end of file diff --git a/webvowl/js/d3.min.js b/webvowl/js/d3.min.js new file mode 100644 index 0000000..1664873 --- /dev/null +++ b/webvowl/js/d3.min.js @@ -0,0 +1,5 @@ +!function(){function n(n){return n&&(n.ownerDocument||n.document||n).documentElement}function t(n){return n&&(n.ownerDocument&&n.ownerDocument.defaultView||n.document&&n||n.defaultView)}function e(n,t){return t>n?-1:n>t?1:n>=t?0:NaN}function r(n){return null===n?NaN:+n}function i(n){return!isNaN(n)}function u(n){return{left:function(t,e,r,i){for(arguments.length<3&&(r=0),arguments.length<4&&(i=t.length);i>r;){var u=r+i>>>1;n(t[u],e)<0?r=u+1:i=u}return r},right:function(t,e,r,i){for(arguments.length<3&&(r=0),arguments.length<4&&(i=t.length);i>r;){var u=r+i>>>1;n(t[u],e)>0?i=u:r=u+1}return r}}}function o(n){return n.length}function a(n){for(var t=1;n*t%1;)t*=10;return t}function l(n,t){for(var e in t)Object.defineProperty(n.prototype,e,{value:t[e],enumerable:!1})}function c(){this._=Object.create(null)}function f(n){return(n+="")===bo||n[0]===_o?_o+n:n}function s(n){return(n+="")[0]===_o?n.slice(1):n}function h(n){return f(n)in this._}function p(n){return(n=f(n))in this._&&delete this._[n]}function g(){var n=[];for(var t in this._)n.push(s(t));return n}function v(){var n=0;for(var t in this._)++n;return n}function d(){for(var n in this._)return!1;return!0}function y(){this._=Object.create(null)}function m(n){return n}function M(n,t,e){return function(){var r=e.apply(t,arguments);return r===t?n:r}}function x(n,t){if(t in n)return t;t=t.charAt(0).toUpperCase()+t.slice(1);for(var e=0,r=wo.length;r>e;++e){var i=wo[e]+t;if(i in n)return i}}function b(){}function _(){}function w(n){function t(){for(var t,r=e,i=-1,u=r.length;++ie;e++)for(var i,u=n[e],o=0,a=u.length;a>o;o++)(i=u[o])&&t(i,o,e);return n}function Z(n){return ko(n,qo),n}function V(n){var t,e;return function(r,i,u){var o,a=n[u].update,l=a.length;for(u!=e&&(e=u,t=0),i>=t&&(t=i+1);!(o=a[t])&&++t0&&(n=n.slice(0,a));var c=To.get(n);return c&&(n=c,l=B),a?t?i:r:t?b:u}function $(n,t){return function(e){var r=ao.event;ao.event=e,t[0]=this.__data__;try{n.apply(this,t)}finally{ao.event=r}}}function B(n,t){var e=$(n,t);return function(n){var t=this,r=n.relatedTarget;r&&(r===t||8&r.compareDocumentPosition(t))||e.call(t,n)}}function W(e){var r=".dragsuppress-"+ ++Do,i="click"+r,u=ao.select(t(e)).on("touchmove"+r,S).on("dragstart"+r,S).on("selectstart"+r,S);if(null==Ro&&(Ro="onselectstart"in e?!1:x(e.style,"userSelect")),Ro){var o=n(e).style,a=o[Ro];o[Ro]="none"}return function(n){if(u.on(r,null),Ro&&(o[Ro]=a),n){var t=function(){u.on(i,null)};u.on(i,function(){S(),t()},!0),setTimeout(t,0)}}}function J(n,e){e.changedTouches&&(e=e.changedTouches[0]);var r=n.ownerSVGElement||n;if(r.createSVGPoint){var i=r.createSVGPoint();if(0>Po){var u=t(n);if(u.scrollX||u.scrollY){r=ao.select("body").append("svg").style({position:"absolute",top:0,left:0,margin:0,padding:0,border:"none"},"important");var o=r[0][0].getScreenCTM();Po=!(o.f||o.e),r.remove()}}return Po?(i.x=e.pageX,i.y=e.pageY):(i.x=e.clientX,i.y=e.clientY),i=i.matrixTransform(n.getScreenCTM().inverse()),[i.x,i.y]}var a=n.getBoundingClientRect();return[e.clientX-a.left-n.clientLeft,e.clientY-a.top-n.clientTop]}function G(){return ao.event.changedTouches[0].identifier}function K(n){return n>0?1:0>n?-1:0}function Q(n,t,e){return(t[0]-n[0])*(e[1]-n[1])-(t[1]-n[1])*(e[0]-n[0])}function nn(n){return n>1?0:-1>n?Fo:Math.acos(n)}function tn(n){return n>1?Io:-1>n?-Io:Math.asin(n)}function en(n){return((n=Math.exp(n))-1/n)/2}function rn(n){return((n=Math.exp(n))+1/n)/2}function un(n){return((n=Math.exp(2*n))-1)/(n+1)}function on(n){return(n=Math.sin(n/2))*n}function an(){}function ln(n,t,e){return this instanceof ln?(this.h=+n,this.s=+t,void(this.l=+e)):arguments.length<2?n instanceof ln?new ln(n.h,n.s,n.l):_n(""+n,wn,ln):new ln(n,t,e)}function cn(n,t,e){function r(n){return n>360?n-=360:0>n&&(n+=360),60>n?u+(o-u)*n/60:180>n?o:240>n?u+(o-u)*(240-n)/60:u}function i(n){return Math.round(255*r(n))}var u,o;return n=isNaN(n)?0:(n%=360)<0?n+360:n,t=isNaN(t)?0:0>t?0:t>1?1:t,e=0>e?0:e>1?1:e,o=.5>=e?e*(1+t):e+t-e*t,u=2*e-o,new mn(i(n+120),i(n),i(n-120))}function fn(n,t,e){return this instanceof fn?(this.h=+n,this.c=+t,void(this.l=+e)):arguments.length<2?n instanceof fn?new fn(n.h,n.c,n.l):n instanceof hn?gn(n.l,n.a,n.b):gn((n=Sn((n=ao.rgb(n)).r,n.g,n.b)).l,n.a,n.b):new fn(n,t,e)}function sn(n,t,e){return isNaN(n)&&(n=0),isNaN(t)&&(t=0),new hn(e,Math.cos(n*=Yo)*t,Math.sin(n)*t)}function hn(n,t,e){return this instanceof hn?(this.l=+n,this.a=+t,void(this.b=+e)):arguments.length<2?n instanceof hn?new hn(n.l,n.a,n.b):n instanceof fn?sn(n.h,n.c,n.l):Sn((n=mn(n)).r,n.g,n.b):new hn(n,t,e)}function pn(n,t,e){var r=(n+16)/116,i=r+t/500,u=r-e/200;return i=vn(i)*na,r=vn(r)*ta,u=vn(u)*ea,new mn(yn(3.2404542*i-1.5371385*r-.4985314*u),yn(-.969266*i+1.8760108*r+.041556*u),yn(.0556434*i-.2040259*r+1.0572252*u))}function gn(n,t,e){return n>0?new fn(Math.atan2(e,t)*Zo,Math.sqrt(t*t+e*e),n):new fn(NaN,NaN,n)}function vn(n){return n>.206893034?n*n*n:(n-4/29)/7.787037}function dn(n){return n>.008856?Math.pow(n,1/3):7.787037*n+4/29}function yn(n){return Math.round(255*(.00304>=n?12.92*n:1.055*Math.pow(n,1/2.4)-.055))}function mn(n,t,e){return this instanceof mn?(this.r=~~n,this.g=~~t,void(this.b=~~e)):arguments.length<2?n instanceof mn?new mn(n.r,n.g,n.b):_n(""+n,mn,cn):new mn(n,t,e)}function Mn(n){return new mn(n>>16,n>>8&255,255&n)}function xn(n){return Mn(n)+""}function bn(n){return 16>n?"0"+Math.max(0,n).toString(16):Math.min(255,n).toString(16)}function _n(n,t,e){var r,i,u,o=0,a=0,l=0;if(r=/([a-z]+)\((.*)\)/.exec(n=n.toLowerCase()))switch(i=r[2].split(","),r[1]){case"hsl":return e(parseFloat(i[0]),parseFloat(i[1])/100,parseFloat(i[2])/100);case"rgb":return t(Nn(i[0]),Nn(i[1]),Nn(i[2]))}return(u=ua.get(n))?t(u.r,u.g,u.b):(null==n||"#"!==n.charAt(0)||isNaN(u=parseInt(n.slice(1),16))||(4===n.length?(o=(3840&u)>>4,o=o>>4|o,a=240&u,a=a>>4|a,l=15&u,l=l<<4|l):7===n.length&&(o=(16711680&u)>>16,a=(65280&u)>>8,l=255&u)),t(o,a,l))}function wn(n,t,e){var r,i,u=Math.min(n/=255,t/=255,e/=255),o=Math.max(n,t,e),a=o-u,l=(o+u)/2;return a?(i=.5>l?a/(o+u):a/(2-o-u),r=n==o?(t-e)/a+(e>t?6:0):t==o?(e-n)/a+2:(n-t)/a+4,r*=60):(r=NaN,i=l>0&&1>l?0:r),new ln(r,i,l)}function Sn(n,t,e){n=kn(n),t=kn(t),e=kn(e);var r=dn((.4124564*n+.3575761*t+.1804375*e)/na),i=dn((.2126729*n+.7151522*t+.072175*e)/ta),u=dn((.0193339*n+.119192*t+.9503041*e)/ea);return hn(116*i-16,500*(r-i),200*(i-u))}function kn(n){return(n/=255)<=.04045?n/12.92:Math.pow((n+.055)/1.055,2.4)}function Nn(n){var t=parseFloat(n);return"%"===n.charAt(n.length-1)?Math.round(2.55*t):t}function En(n){return"function"==typeof n?n:function(){return n}}function An(n){return function(t,e,r){return 2===arguments.length&&"function"==typeof e&&(r=e,e=null),Cn(t,e,n,r)}}function Cn(n,t,e,r){function i(){var n,t=l.status;if(!t&&Ln(l)||t>=200&&300>t||304===t){try{n=e.call(u,l)}catch(r){return void o.error.call(u,r)}o.load.call(u,n)}else o.error.call(u,l)}var u={},o=ao.dispatch("beforesend","progress","load","error"),a={},l=new XMLHttpRequest,c=null;return!this.XDomainRequest||"withCredentials"in l||!/^(http(s)?:)?\/\//.test(n)||(l=new XDomainRequest),"onload"in l?l.onload=l.onerror=i:l.onreadystatechange=function(){l.readyState>3&&i()},l.onprogress=function(n){var t=ao.event;ao.event=n;try{o.progress.call(u,l)}finally{ao.event=t}},u.header=function(n,t){return n=(n+"").toLowerCase(),arguments.length<2?a[n]:(null==t?delete a[n]:a[n]=t+"",u)},u.mimeType=function(n){return arguments.length?(t=null==n?null:n+"",u):t},u.responseType=function(n){return arguments.length?(c=n,u):c},u.response=function(n){return e=n,u},["get","post"].forEach(function(n){u[n]=function(){return u.send.apply(u,[n].concat(co(arguments)))}}),u.send=function(e,r,i){if(2===arguments.length&&"function"==typeof r&&(i=r,r=null),l.open(e,n,!0),null==t||"accept"in a||(a.accept=t+",*/*"),l.setRequestHeader)for(var f in a)l.setRequestHeader(f,a[f]);return null!=t&&l.overrideMimeType&&l.overrideMimeType(t),null!=c&&(l.responseType=c),null!=i&&u.on("error",i).on("load",function(n){i(null,n)}),o.beforesend.call(u,l),l.send(null==r?null:r),u},u.abort=function(){return l.abort(),u},ao.rebind(u,o,"on"),null==r?u:u.get(zn(r))}function zn(n){return 1===n.length?function(t,e){n(null==t?e:null)}:n}function Ln(n){var t=n.responseType;return t&&"text"!==t?n.response:n.responseText}function qn(n,t,e){var r=arguments.length;2>r&&(t=0),3>r&&(e=Date.now());var i=e+t,u={c:n,t:i,n:null};return aa?aa.n=u:oa=u,aa=u,la||(ca=clearTimeout(ca),la=1,fa(Tn)),u}function Tn(){var n=Rn(),t=Dn()-n;t>24?(isFinite(t)&&(clearTimeout(ca),ca=setTimeout(Tn,t)),la=0):(la=1,fa(Tn))}function Rn(){for(var n=Date.now(),t=oa;t;)n>=t.t&&t.c(n-t.t)&&(t.c=null),t=t.n;return n}function Dn(){for(var n,t=oa,e=1/0;t;)t.c?(t.t8?function(n){return n/e}:function(n){return n*e},symbol:n}}function jn(n){var t=n.decimal,e=n.thousands,r=n.grouping,i=n.currency,u=r&&e?function(n,t){for(var i=n.length,u=[],o=0,a=r[0],l=0;i>0&&a>0&&(l+a+1>t&&(a=Math.max(1,t-l)),u.push(n.substring(i-=a,i+a)),!((l+=a+1)>t));)a=r[o=(o+1)%r.length];return u.reverse().join(e)}:m;return function(n){var e=ha.exec(n),r=e[1]||" ",o=e[2]||">",a=e[3]||"-",l=e[4]||"",c=e[5],f=+e[6],s=e[7],h=e[8],p=e[9],g=1,v="",d="",y=!1,m=!0;switch(h&&(h=+h.substring(1)),(c||"0"===r&&"="===o)&&(c=r="0",o="="),p){case"n":s=!0,p="g";break;case"%":g=100,d="%",p="f";break;case"p":g=100,d="%",p="r";break;case"b":case"o":case"x":case"X":"#"===l&&(v="0"+p.toLowerCase());case"c":m=!1;case"d":y=!0,h=0;break;case"s":g=-1,p="r"}"$"===l&&(v=i[0],d=i[1]),"r"!=p||h||(p="g"),null!=h&&("g"==p?h=Math.max(1,Math.min(21,h)):"e"!=p&&"f"!=p||(h=Math.max(0,Math.min(20,h)))),p=pa.get(p)||Fn;var M=c&&s;return function(n){var e=d;if(y&&n%1)return"";var i=0>n||0===n&&0>1/n?(n=-n,"-"):"-"===a?"":a;if(0>g){var l=ao.formatPrefix(n,h);n=l.scale(n),e=l.symbol+d}else n*=g;n=p(n,h);var x,b,_=n.lastIndexOf(".");if(0>_){var w=m?n.lastIndexOf("e"):-1;0>w?(x=n,b=""):(x=n.substring(0,w),b=n.substring(w))}else x=n.substring(0,_),b=t+n.substring(_+1);!c&&s&&(x=u(x,1/0));var S=v.length+x.length+b.length+(M?0:i.length),k=f>S?new Array(S=f-S+1).join(r):"";return M&&(x=u(k+x,k.length?f-b.length:1/0)),i+=v,n=x+b,("<"===o?i+n+k:">"===o?k+i+n:"^"===o?k.substring(0,S>>=1)+i+n+k.substring(S):i+(M?n:k+n))+e}}}function Fn(n){return n+""}function Hn(){this._=new Date(arguments.length>1?Date.UTC.apply(this,arguments):arguments[0])}function On(n,t,e){function r(t){var e=n(t),r=u(e,1);return r-t>t-e?e:r}function i(e){return t(e=n(new va(e-1)),1),e}function u(n,e){return t(n=new va(+n),e),n}function o(n,r,u){var o=i(n),a=[];if(u>1)for(;r>o;)e(o)%u||a.push(new Date(+o)),t(o,1);else for(;r>o;)a.push(new Date(+o)),t(o,1);return a}function a(n,t,e){try{va=Hn;var r=new Hn;return r._=n,o(r,t,e)}finally{va=Date}}n.floor=n,n.round=r,n.ceil=i,n.offset=u,n.range=o;var l=n.utc=In(n);return l.floor=l,l.round=In(r),l.ceil=In(i),l.offset=In(u),l.range=a,n}function In(n){return function(t,e){try{va=Hn;var r=new Hn;return r._=t,n(r,e)._}finally{va=Date}}}function Yn(n){function t(n){function t(t){for(var e,i,u,o=[],a=-1,l=0;++aa;){if(r>=c)return-1;if(i=t.charCodeAt(a++),37===i){if(o=t.charAt(a++),u=C[o in ya?t.charAt(a++):o],!u||(r=u(n,e,r))<0)return-1}else if(i!=e.charCodeAt(r++))return-1}return r}function r(n,t,e){_.lastIndex=0;var r=_.exec(t.slice(e));return r?(n.w=w.get(r[0].toLowerCase()),e+r[0].length):-1}function i(n,t,e){x.lastIndex=0;var r=x.exec(t.slice(e));return r?(n.w=b.get(r[0].toLowerCase()),e+r[0].length):-1}function u(n,t,e){N.lastIndex=0;var r=N.exec(t.slice(e));return r?(n.m=E.get(r[0].toLowerCase()),e+r[0].length):-1}function o(n,t,e){S.lastIndex=0;var r=S.exec(t.slice(e));return r?(n.m=k.get(r[0].toLowerCase()),e+r[0].length):-1}function a(n,t,r){return e(n,A.c.toString(),t,r)}function l(n,t,r){return e(n,A.x.toString(),t,r)}function c(n,t,r){return e(n,A.X.toString(),t,r)}function f(n,t,e){var r=M.get(t.slice(e,e+=2).toLowerCase());return null==r?-1:(n.p=r,e)}var s=n.dateTime,h=n.date,p=n.time,g=n.periods,v=n.days,d=n.shortDays,y=n.months,m=n.shortMonths;t.utc=function(n){function e(n){try{va=Hn;var t=new va;return t._=n,r(t)}finally{va=Date}}var r=t(n);return e.parse=function(n){try{va=Hn;var t=r.parse(n);return t&&t._}finally{va=Date}},e.toString=r.toString,e},t.multi=t.utc.multi=ct;var M=ao.map(),x=Vn(v),b=Xn(v),_=Vn(d),w=Xn(d),S=Vn(y),k=Xn(y),N=Vn(m),E=Xn(m);g.forEach(function(n,t){M.set(n.toLowerCase(),t)});var A={a:function(n){return d[n.getDay()]},A:function(n){return v[n.getDay()]},b:function(n){return m[n.getMonth()]},B:function(n){return y[n.getMonth()]},c:t(s),d:function(n,t){return Zn(n.getDate(),t,2)},e:function(n,t){return Zn(n.getDate(),t,2)},H:function(n,t){return Zn(n.getHours(),t,2)},I:function(n,t){return Zn(n.getHours()%12||12,t,2)},j:function(n,t){return Zn(1+ga.dayOfYear(n),t,3)},L:function(n,t){return Zn(n.getMilliseconds(),t,3)},m:function(n,t){return Zn(n.getMonth()+1,t,2)},M:function(n,t){return Zn(n.getMinutes(),t,2)},p:function(n){return g[+(n.getHours()>=12)]},S:function(n,t){return Zn(n.getSeconds(),t,2)},U:function(n,t){return Zn(ga.sundayOfYear(n),t,2)},w:function(n){return n.getDay()},W:function(n,t){return Zn(ga.mondayOfYear(n),t,2)},x:t(h),X:t(p),y:function(n,t){return Zn(n.getFullYear()%100,t,2)},Y:function(n,t){return Zn(n.getFullYear()%1e4,t,4)},Z:at,"%":function(){return"%"}},C={a:r,A:i,b:u,B:o,c:a,d:tt,e:tt,H:rt,I:rt,j:et,L:ot,m:nt,M:it,p:f,S:ut,U:Bn,w:$n,W:Wn,x:l,X:c,y:Gn,Y:Jn,Z:Kn,"%":lt};return t}function Zn(n,t,e){var r=0>n?"-":"",i=(r?-n:n)+"",u=i.length;return r+(e>u?new Array(e-u+1).join(t)+i:i)}function Vn(n){return new RegExp("^(?:"+n.map(ao.requote).join("|")+")","i")}function Xn(n){for(var t=new c,e=-1,r=n.length;++e68?1900:2e3)}function nt(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.m=r[0]-1,e+r[0].length):-1}function tt(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.d=+r[0],e+r[0].length):-1}function et(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+3));return r?(n.j=+r[0],e+r[0].length):-1}function rt(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.H=+r[0],e+r[0].length):-1}function it(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.M=+r[0],e+r[0].length):-1}function ut(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.S=+r[0],e+r[0].length):-1}function ot(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+3));return r?(n.L=+r[0],e+r[0].length):-1}function at(n){var t=n.getTimezoneOffset(),e=t>0?"-":"+",r=xo(t)/60|0,i=xo(t)%60;return e+Zn(r,"0",2)+Zn(i,"0",2)}function lt(n,t,e){Ma.lastIndex=0;var r=Ma.exec(t.slice(e,e+1));return r?e+r[0].length:-1}function ct(n){for(var t=n.length,e=-1;++e=0?1:-1,a=o*e,l=Math.cos(t),c=Math.sin(t),f=u*c,s=i*l+f*Math.cos(a),h=f*o*Math.sin(a);ka.add(Math.atan2(h,s)),r=n,i=l,u=c}var t,e,r,i,u;Na.point=function(o,a){Na.point=n,r=(t=o)*Yo,i=Math.cos(a=(e=a)*Yo/2+Fo/4),u=Math.sin(a)},Na.lineEnd=function(){n(t,e)}}function dt(n){var t=n[0],e=n[1],r=Math.cos(e);return[r*Math.cos(t),r*Math.sin(t),Math.sin(e)]}function yt(n,t){return n[0]*t[0]+n[1]*t[1]+n[2]*t[2]}function mt(n,t){return[n[1]*t[2]-n[2]*t[1],n[2]*t[0]-n[0]*t[2],n[0]*t[1]-n[1]*t[0]]}function Mt(n,t){n[0]+=t[0],n[1]+=t[1],n[2]+=t[2]}function xt(n,t){return[n[0]*t,n[1]*t,n[2]*t]}function bt(n){var t=Math.sqrt(n[0]*n[0]+n[1]*n[1]+n[2]*n[2]);n[0]/=t,n[1]/=t,n[2]/=t}function _t(n){return[Math.atan2(n[1],n[0]),tn(n[2])]}function wt(n,t){return xo(n[0]-t[0])a;++a)i.point((e=n[a])[0],e[1]);return void i.lineEnd()}var l=new Tt(e,n,null,!0),c=new Tt(e,null,l,!1);l.o=c,u.push(l),o.push(c),l=new Tt(r,n,null,!1),c=new Tt(r,null,l,!0),l.o=c,u.push(l),o.push(c)}}),o.sort(t),qt(u),qt(o),u.length){for(var a=0,l=e,c=o.length;c>a;++a)o[a].e=l=!l;for(var f,s,h=u[0];;){for(var p=h,g=!0;p.v;)if((p=p.n)===h)return;f=p.z,i.lineStart();do{if(p.v=p.o.v=!0,p.e){if(g)for(var a=0,c=f.length;c>a;++a)i.point((s=f[a])[0],s[1]);else r(p.x,p.n.x,1,i);p=p.n}else{if(g){f=p.p.z;for(var a=f.length-1;a>=0;--a)i.point((s=f[a])[0],s[1])}else r(p.x,p.p.x,-1,i);p=p.p}p=p.o,f=p.z,g=!g}while(!p.v);i.lineEnd()}}}function qt(n){if(t=n.length){for(var t,e,r=0,i=n[0];++r0){for(b||(u.polygonStart(),b=!0),u.lineStart();++o1&&2&t&&e.push(e.pop().concat(e.shift())),p.push(e.filter(Dt))}var p,g,v,d=t(u),y=i.invert(r[0],r[1]),m={point:o,lineStart:l,lineEnd:c,polygonStart:function(){m.point=f,m.lineStart=s,m.lineEnd=h,p=[],g=[]},polygonEnd:function(){m.point=o,m.lineStart=l,m.lineEnd=c,p=ao.merge(p);var n=Ot(y,g);p.length?(b||(u.polygonStart(),b=!0),Lt(p,Ut,n,e,u)):n&&(b||(u.polygonStart(),b=!0),u.lineStart(),e(null,null,1,u),u.lineEnd()),b&&(u.polygonEnd(),b=!1),p=g=null},sphere:function(){u.polygonStart(),u.lineStart(),e(null,null,1,u),u.lineEnd(),u.polygonEnd()}},M=Pt(),x=t(M),b=!1;return m}}function Dt(n){return n.length>1}function Pt(){var n,t=[];return{lineStart:function(){t.push(n=[])},point:function(t,e){n.push([t,e])},lineEnd:b,buffer:function(){var e=t;return t=[],n=null,e},rejoin:function(){t.length>1&&t.push(t.pop().concat(t.shift()))}}}function Ut(n,t){return((n=n.x)[0]<0?n[1]-Io-Uo:Io-n[1])-((t=t.x)[0]<0?t[1]-Io-Uo:Io-t[1])}function jt(n){var t,e=NaN,r=NaN,i=NaN;return{lineStart:function(){n.lineStart(),t=1},point:function(u,o){var a=u>0?Fo:-Fo,l=xo(u-e);xo(l-Fo)0?Io:-Io),n.point(i,r),n.lineEnd(),n.lineStart(),n.point(a,r),n.point(u,r),t=0):i!==a&&l>=Fo&&(xo(e-i)Uo?Math.atan((Math.sin(t)*(u=Math.cos(r))*Math.sin(e)-Math.sin(r)*(i=Math.cos(t))*Math.sin(n))/(i*u*o)):(t+r)/2}function Ht(n,t,e,r){var i;if(null==n)i=e*Io,r.point(-Fo,i),r.point(0,i),r.point(Fo,i),r.point(Fo,0),r.point(Fo,-i),r.point(0,-i),r.point(-Fo,-i),r.point(-Fo,0),r.point(-Fo,i);else if(xo(n[0]-t[0])>Uo){var u=n[0]a;++a){var c=t[a],f=c.length;if(f)for(var s=c[0],h=s[0],p=s[1]/2+Fo/4,g=Math.sin(p),v=Math.cos(p),d=1;;){d===f&&(d=0),n=c[d];var y=n[0],m=n[1]/2+Fo/4,M=Math.sin(m),x=Math.cos(m),b=y-h,_=b>=0?1:-1,w=_*b,S=w>Fo,k=g*M;if(ka.add(Math.atan2(k*_*Math.sin(w),v*x+k*Math.cos(w))),u+=S?b+_*Ho:b,S^h>=e^y>=e){var N=mt(dt(s),dt(n));bt(N);var E=mt(i,N);bt(E);var A=(S^b>=0?-1:1)*tn(E[2]);(r>A||r===A&&(N[0]||N[1]))&&(o+=S^b>=0?1:-1)}if(!d++)break;h=y,g=M,v=x,s=n}}return(-Uo>u||Uo>u&&-Uo>ka)^1&o}function It(n){function t(n,t){return Math.cos(n)*Math.cos(t)>u}function e(n){var e,u,l,c,f;return{lineStart:function(){c=l=!1,f=1},point:function(s,h){var p,g=[s,h],v=t(s,h),d=o?v?0:i(s,h):v?i(s+(0>s?Fo:-Fo),h):0;if(!e&&(c=l=v)&&n.lineStart(),v!==l&&(p=r(e,g),(wt(e,p)||wt(g,p))&&(g[0]+=Uo,g[1]+=Uo,v=t(g[0],g[1]))),v!==l)f=0,v?(n.lineStart(),p=r(g,e),n.point(p[0],p[1])):(p=r(e,g),n.point(p[0],p[1]),n.lineEnd()),e=p;else if(a&&e&&o^v){var y;d&u||!(y=r(g,e,!0))||(f=0,o?(n.lineStart(),n.point(y[0][0],y[0][1]),n.point(y[1][0],y[1][1]),n.lineEnd()):(n.point(y[1][0],y[1][1]),n.lineEnd(),n.lineStart(),n.point(y[0][0],y[0][1])))}!v||e&&wt(e,g)||n.point(g[0],g[1]),e=g,l=v,u=d},lineEnd:function(){l&&n.lineEnd(),e=null},clean:function(){return f|(c&&l)<<1}}}function r(n,t,e){var r=dt(n),i=dt(t),o=[1,0,0],a=mt(r,i),l=yt(a,a),c=a[0],f=l-c*c;if(!f)return!e&&n;var s=u*l/f,h=-u*c/f,p=mt(o,a),g=xt(o,s),v=xt(a,h);Mt(g,v);var d=p,y=yt(g,d),m=yt(d,d),M=y*y-m*(yt(g,g)-1);if(!(0>M)){var x=Math.sqrt(M),b=xt(d,(-y-x)/m);if(Mt(b,g),b=_t(b),!e)return b;var _,w=n[0],S=t[0],k=n[1],N=t[1];w>S&&(_=w,w=S,S=_);var E=S-w,A=xo(E-Fo)E;if(!A&&k>N&&(_=k,k=N,N=_),C?A?k+N>0^b[1]<(xo(b[0]-w)Fo^(w<=b[0]&&b[0]<=S)){var z=xt(d,(-y+x)/m);return Mt(z,g),[b,_t(z)]}}}function i(t,e){var r=o?n:Fo-n,i=0;return-r>t?i|=1:t>r&&(i|=2),-r>e?i|=4:e>r&&(i|=8),i}var u=Math.cos(n),o=u>0,a=xo(u)>Uo,l=ve(n,6*Yo);return Rt(t,e,l,o?[0,-n]:[-Fo,n-Fo])}function Yt(n,t,e,r){return function(i){var u,o=i.a,a=i.b,l=o.x,c=o.y,f=a.x,s=a.y,h=0,p=1,g=f-l,v=s-c;if(u=n-l,g||!(u>0)){if(u/=g,0>g){if(h>u)return;p>u&&(p=u)}else if(g>0){if(u>p)return;u>h&&(h=u)}if(u=e-l,g||!(0>u)){if(u/=g,0>g){if(u>p)return;u>h&&(h=u)}else if(g>0){if(h>u)return;p>u&&(p=u)}if(u=t-c,v||!(u>0)){if(u/=v,0>v){if(h>u)return;p>u&&(p=u)}else if(v>0){if(u>p)return;u>h&&(h=u)}if(u=r-c,v||!(0>u)){if(u/=v,0>v){if(u>p)return;u>h&&(h=u)}else if(v>0){if(h>u)return;p>u&&(p=u)}return h>0&&(i.a={x:l+h*g,y:c+h*v}),1>p&&(i.b={x:l+p*g,y:c+p*v}),i}}}}}}function Zt(n,t,e,r){function i(r,i){return xo(r[0]-n)0?0:3:xo(r[0]-e)0?2:1:xo(r[1]-t)0?1:0:i>0?3:2}function u(n,t){return o(n.x,t.x)}function o(n,t){var e=i(n,1),r=i(t,1);return e!==r?e-r:0===e?t[1]-n[1]:1===e?n[0]-t[0]:2===e?n[1]-t[1]:t[0]-n[0]}return function(a){function l(n){for(var t=0,e=d.length,r=n[1],i=0;e>i;++i)for(var u,o=1,a=d[i],l=a.length,c=a[0];l>o;++o)u=a[o],c[1]<=r?u[1]>r&&Q(c,u,n)>0&&++t:u[1]<=r&&Q(c,u,n)<0&&--t,c=u;return 0!==t}function c(u,a,l,c){var f=0,s=0;if(null==u||(f=i(u,l))!==(s=i(a,l))||o(u,a)<0^l>0){do c.point(0===f||3===f?n:e,f>1?r:t);while((f=(f+l+4)%4)!==s)}else c.point(a[0],a[1])}function f(i,u){return i>=n&&e>=i&&u>=t&&r>=u}function s(n,t){f(n,t)&&a.point(n,t)}function h(){C.point=g,d&&d.push(y=[]),S=!0,w=!1,b=_=NaN}function p(){v&&(g(m,M),x&&w&&E.rejoin(),v.push(E.buffer())),C.point=s,w&&a.lineEnd()}function g(n,t){n=Math.max(-Ha,Math.min(Ha,n)),t=Math.max(-Ha,Math.min(Ha,t));var e=f(n,t);if(d&&y.push([n,t]),S)m=n,M=t,x=e,S=!1,e&&(a.lineStart(),a.point(n,t));else if(e&&w)a.point(n,t);else{var r={a:{x:b,y:_},b:{x:n,y:t}};A(r)?(w||(a.lineStart(),a.point(r.a.x,r.a.y)),a.point(r.b.x,r.b.y),e||a.lineEnd(),k=!1):e&&(a.lineStart(),a.point(n,t),k=!1)}b=n,_=t,w=e}var v,d,y,m,M,x,b,_,w,S,k,N=a,E=Pt(),A=Yt(n,t,e,r),C={point:s,lineStart:h,lineEnd:p,polygonStart:function(){a=E,v=[],d=[],k=!0},polygonEnd:function(){a=N,v=ao.merge(v);var t=l([n,r]),e=k&&t,i=v.length;(e||i)&&(a.polygonStart(),e&&(a.lineStart(),c(null,null,1,a),a.lineEnd()),i&&Lt(v,u,t,c,a),a.polygonEnd()),v=d=y=null}};return C}}function Vt(n){var t=0,e=Fo/3,r=ae(n),i=r(t,e);return i.parallels=function(n){return arguments.length?r(t=n[0]*Fo/180,e=n[1]*Fo/180):[t/Fo*180,e/Fo*180]},i}function Xt(n,t){function e(n,t){var e=Math.sqrt(u-2*i*Math.sin(t))/i;return[e*Math.sin(n*=i),o-e*Math.cos(n)]}var r=Math.sin(n),i=(r+Math.sin(t))/2,u=1+r*(2*i-r),o=Math.sqrt(u)/i;return e.invert=function(n,t){var e=o-t;return[Math.atan2(n,e)/i,tn((u-(n*n+e*e)*i*i)/(2*i))]},e}function $t(){function n(n,t){Ia+=i*n-r*t,r=n,i=t}var t,e,r,i;$a.point=function(u,o){$a.point=n,t=r=u,e=i=o},$a.lineEnd=function(){n(t,e)}}function Bt(n,t){Ya>n&&(Ya=n),n>Va&&(Va=n),Za>t&&(Za=t),t>Xa&&(Xa=t)}function Wt(){function n(n,t){o.push("M",n,",",t,u)}function t(n,t){o.push("M",n,",",t),a.point=e}function e(n,t){o.push("L",n,",",t)}function r(){a.point=n}function i(){o.push("Z")}var u=Jt(4.5),o=[],a={point:n,lineStart:function(){a.point=t},lineEnd:r,polygonStart:function(){a.lineEnd=i},polygonEnd:function(){a.lineEnd=r,a.point=n},pointRadius:function(n){return u=Jt(n),a},result:function(){if(o.length){var n=o.join("");return o=[],n}}};return a}function Jt(n){return"m0,"+n+"a"+n+","+n+" 0 1,1 0,"+-2*n+"a"+n+","+n+" 0 1,1 0,"+2*n+"z"}function Gt(n,t){Ca+=n,za+=t,++La}function Kt(){function n(n,r){var i=n-t,u=r-e,o=Math.sqrt(i*i+u*u);qa+=o*(t+n)/2,Ta+=o*(e+r)/2,Ra+=o,Gt(t=n,e=r)}var t,e;Wa.point=function(r,i){Wa.point=n,Gt(t=r,e=i)}}function Qt(){Wa.point=Gt}function ne(){function n(n,t){var e=n-r,u=t-i,o=Math.sqrt(e*e+u*u);qa+=o*(r+n)/2,Ta+=o*(i+t)/2,Ra+=o,o=i*n-r*t,Da+=o*(r+n),Pa+=o*(i+t),Ua+=3*o,Gt(r=n,i=t)}var t,e,r,i;Wa.point=function(u,o){Wa.point=n,Gt(t=r=u,e=i=o)},Wa.lineEnd=function(){n(t,e)}}function te(n){function t(t,e){n.moveTo(t+o,e),n.arc(t,e,o,0,Ho)}function e(t,e){n.moveTo(t,e),a.point=r}function r(t,e){n.lineTo(t,e)}function i(){a.point=t}function u(){n.closePath()}var o=4.5,a={point:t,lineStart:function(){a.point=e},lineEnd:i,polygonStart:function(){a.lineEnd=u},polygonEnd:function(){a.lineEnd=i,a.point=t},pointRadius:function(n){return o=n,a},result:b};return a}function ee(n){function t(n){return(a?r:e)(n)}function e(t){return ue(t,function(e,r){e=n(e,r),t.point(e[0],e[1])})}function r(t){function e(e,r){e=n(e,r),t.point(e[0],e[1])}function r(){M=NaN,S.point=u,t.lineStart()}function u(e,r){var u=dt([e,r]),o=n(e,r);i(M,x,m,b,_,w,M=o[0],x=o[1],m=e,b=u[0],_=u[1],w=u[2],a,t),t.point(M,x)}function o(){S.point=e,t.lineEnd()}function l(){ +r(),S.point=c,S.lineEnd=f}function c(n,t){u(s=n,h=t),p=M,g=x,v=b,d=_,y=w,S.point=u}function f(){i(M,x,m,b,_,w,p,g,s,v,d,y,a,t),S.lineEnd=o,o()}var s,h,p,g,v,d,y,m,M,x,b,_,w,S={point:e,lineStart:r,lineEnd:o,polygonStart:function(){t.polygonStart(),S.lineStart=l},polygonEnd:function(){t.polygonEnd(),S.lineStart=r}};return S}function i(t,e,r,a,l,c,f,s,h,p,g,v,d,y){var m=f-t,M=s-e,x=m*m+M*M;if(x>4*u&&d--){var b=a+p,_=l+g,w=c+v,S=Math.sqrt(b*b+_*_+w*w),k=Math.asin(w/=S),N=xo(xo(w)-1)u||xo((m*z+M*L)/x-.5)>.3||o>a*p+l*g+c*v)&&(i(t,e,r,a,l,c,A,C,N,b/=S,_/=S,w,d,y),y.point(A,C),i(A,C,N,b,_,w,f,s,h,p,g,v,d,y))}}var u=.5,o=Math.cos(30*Yo),a=16;return t.precision=function(n){return arguments.length?(a=(u=n*n)>0&&16,t):Math.sqrt(u)},t}function re(n){var t=ee(function(t,e){return n([t*Zo,e*Zo])});return function(n){return le(t(n))}}function ie(n){this.stream=n}function ue(n,t){return{point:t,sphere:function(){n.sphere()},lineStart:function(){n.lineStart()},lineEnd:function(){n.lineEnd()},polygonStart:function(){n.polygonStart()},polygonEnd:function(){n.polygonEnd()}}}function oe(n){return ae(function(){return n})()}function ae(n){function t(n){return n=a(n[0]*Yo,n[1]*Yo),[n[0]*h+l,c-n[1]*h]}function e(n){return n=a.invert((n[0]-l)/h,(c-n[1])/h),n&&[n[0]*Zo,n[1]*Zo]}function r(){a=Ct(o=se(y,M,x),u);var n=u(v,d);return l=p-n[0]*h,c=g+n[1]*h,i()}function i(){return f&&(f.valid=!1,f=null),t}var u,o,a,l,c,f,s=ee(function(n,t){return n=u(n,t),[n[0]*h+l,c-n[1]*h]}),h=150,p=480,g=250,v=0,d=0,y=0,M=0,x=0,b=Fa,_=m,w=null,S=null;return t.stream=function(n){return f&&(f.valid=!1),f=le(b(o,s(_(n)))),f.valid=!0,f},t.clipAngle=function(n){return arguments.length?(b=null==n?(w=n,Fa):It((w=+n)*Yo),i()):w},t.clipExtent=function(n){return arguments.length?(S=n,_=n?Zt(n[0][0],n[0][1],n[1][0],n[1][1]):m,i()):S},t.scale=function(n){return arguments.length?(h=+n,r()):h},t.translate=function(n){return arguments.length?(p=+n[0],g=+n[1],r()):[p,g]},t.center=function(n){return arguments.length?(v=n[0]%360*Yo,d=n[1]%360*Yo,r()):[v*Zo,d*Zo]},t.rotate=function(n){return arguments.length?(y=n[0]%360*Yo,M=n[1]%360*Yo,x=n.length>2?n[2]%360*Yo:0,r()):[y*Zo,M*Zo,x*Zo]},ao.rebind(t,s,"precision"),function(){return u=n.apply(this,arguments),t.invert=u.invert&&e,r()}}function le(n){return ue(n,function(t,e){n.point(t*Yo,e*Yo)})}function ce(n,t){return[n,t]}function fe(n,t){return[n>Fo?n-Ho:-Fo>n?n+Ho:n,t]}function se(n,t,e){return n?t||e?Ct(pe(n),ge(t,e)):pe(n):t||e?ge(t,e):fe}function he(n){return function(t,e){return t+=n,[t>Fo?t-Ho:-Fo>t?t+Ho:t,e]}}function pe(n){var t=he(n);return t.invert=he(-n),t}function ge(n,t){function e(n,t){var e=Math.cos(t),a=Math.cos(n)*e,l=Math.sin(n)*e,c=Math.sin(t),f=c*r+a*i;return[Math.atan2(l*u-f*o,a*r-c*i),tn(f*u+l*o)]}var r=Math.cos(n),i=Math.sin(n),u=Math.cos(t),o=Math.sin(t);return e.invert=function(n,t){var e=Math.cos(t),a=Math.cos(n)*e,l=Math.sin(n)*e,c=Math.sin(t),f=c*u-l*o;return[Math.atan2(l*u+c*o,a*r+f*i),tn(f*r-a*i)]},e}function ve(n,t){var e=Math.cos(n),r=Math.sin(n);return function(i,u,o,a){var l=o*t;null!=i?(i=de(e,i),u=de(e,u),(o>0?u>i:i>u)&&(i+=o*Ho)):(i=n+o*Ho,u=n-.5*l);for(var c,f=i;o>0?f>u:u>f;f-=l)a.point((c=_t([e,-r*Math.cos(f),-r*Math.sin(f)]))[0],c[1])}}function de(n,t){var e=dt(t);e[0]-=n,bt(e);var r=nn(-e[1]);return((-e[2]<0?-r:r)+2*Math.PI-Uo)%(2*Math.PI)}function ye(n,t,e){var r=ao.range(n,t-Uo,e).concat(t);return function(n){return r.map(function(t){return[n,t]})}}function me(n,t,e){var r=ao.range(n,t-Uo,e).concat(t);return function(n){return r.map(function(t){return[t,n]})}}function Me(n){return n.source}function xe(n){return n.target}function be(n,t,e,r){var i=Math.cos(t),u=Math.sin(t),o=Math.cos(r),a=Math.sin(r),l=i*Math.cos(n),c=i*Math.sin(n),f=o*Math.cos(e),s=o*Math.sin(e),h=2*Math.asin(Math.sqrt(on(r-t)+i*o*on(e-n))),p=1/Math.sin(h),g=h?function(n){var t=Math.sin(n*=h)*p,e=Math.sin(h-n)*p,r=e*l+t*f,i=e*c+t*s,o=e*u+t*a;return[Math.atan2(i,r)*Zo,Math.atan2(o,Math.sqrt(r*r+i*i))*Zo]}:function(){return[n*Zo,t*Zo]};return g.distance=h,g}function _e(){function n(n,i){var u=Math.sin(i*=Yo),o=Math.cos(i),a=xo((n*=Yo)-t),l=Math.cos(a);Ja+=Math.atan2(Math.sqrt((a=o*Math.sin(a))*a+(a=r*u-e*o*l)*a),e*u+r*o*l),t=n,e=u,r=o}var t,e,r;Ga.point=function(i,u){t=i*Yo,e=Math.sin(u*=Yo),r=Math.cos(u),Ga.point=n},Ga.lineEnd=function(){Ga.point=Ga.lineEnd=b}}function we(n,t){function e(t,e){var r=Math.cos(t),i=Math.cos(e),u=n(r*i);return[u*i*Math.sin(t),u*Math.sin(e)]}return e.invert=function(n,e){var r=Math.sqrt(n*n+e*e),i=t(r),u=Math.sin(i),o=Math.cos(i);return[Math.atan2(n*u,r*o),Math.asin(r&&e*u/r)]},e}function Se(n,t){function e(n,t){o>0?-Io+Uo>t&&(t=-Io+Uo):t>Io-Uo&&(t=Io-Uo);var e=o/Math.pow(i(t),u);return[e*Math.sin(u*n),o-e*Math.cos(u*n)]}var r=Math.cos(n),i=function(n){return Math.tan(Fo/4+n/2)},u=n===t?Math.sin(n):Math.log(r/Math.cos(t))/Math.log(i(t)/i(n)),o=r*Math.pow(i(n),u)/u;return u?(e.invert=function(n,t){var e=o-t,r=K(u)*Math.sqrt(n*n+e*e);return[Math.atan2(n,e)/u,2*Math.atan(Math.pow(o/r,1/u))-Io]},e):Ne}function ke(n,t){function e(n,t){var e=u-t;return[e*Math.sin(i*n),u-e*Math.cos(i*n)]}var r=Math.cos(n),i=n===t?Math.sin(n):(r-Math.cos(t))/(t-n),u=r/i+n;return xo(i)i;i++){for(;r>1&&Q(n[e[r-2]],n[e[r-1]],n[i])<=0;)--r;e[r++]=i}return e.slice(0,r)}function qe(n,t){return n[0]-t[0]||n[1]-t[1]}function Te(n,t,e){return(e[0]-t[0])*(n[1]-t[1])<(e[1]-t[1])*(n[0]-t[0])}function Re(n,t,e,r){var i=n[0],u=e[0],o=t[0]-i,a=r[0]-u,l=n[1],c=e[1],f=t[1]-l,s=r[1]-c,h=(a*(l-c)-s*(i-u))/(s*o-a*f);return[i+h*o,l+h*f]}function De(n){var t=n[0],e=n[n.length-1];return!(t[0]-e[0]||t[1]-e[1])}function Pe(){rr(this),this.edge=this.site=this.circle=null}function Ue(n){var t=cl.pop()||new Pe;return t.site=n,t}function je(n){Be(n),ol.remove(n),cl.push(n),rr(n)}function Fe(n){var t=n.circle,e=t.x,r=t.cy,i={x:e,y:r},u=n.P,o=n.N,a=[n];je(n);for(var l=u;l.circle&&xo(e-l.circle.x)f;++f)c=a[f],l=a[f-1],nr(c.edge,l.site,c.site,i);l=a[0],c=a[s-1],c.edge=Ke(l.site,c.site,null,i),$e(l),$e(c)}function He(n){for(var t,e,r,i,u=n.x,o=n.y,a=ol._;a;)if(r=Oe(a,o)-u,r>Uo)a=a.L;else{if(i=u-Ie(a,o),!(i>Uo)){r>-Uo?(t=a.P,e=a):i>-Uo?(t=a,e=a.N):t=e=a;break}if(!a.R){t=a;break}a=a.R}var l=Ue(n);if(ol.insert(t,l),t||e){if(t===e)return Be(t),e=Ue(t.site),ol.insert(l,e),l.edge=e.edge=Ke(t.site,l.site),$e(t),void $e(e);if(!e)return void(l.edge=Ke(t.site,l.site));Be(t),Be(e);var c=t.site,f=c.x,s=c.y,h=n.x-f,p=n.y-s,g=e.site,v=g.x-f,d=g.y-s,y=2*(h*d-p*v),m=h*h+p*p,M=v*v+d*d,x={x:(d*m-p*M)/y+f,y:(h*M-v*m)/y+s};nr(e.edge,c,g,x),l.edge=Ke(c,n,null,x),e.edge=Ke(n,g,null,x),$e(t),$e(e)}}function Oe(n,t){var e=n.site,r=e.x,i=e.y,u=i-t;if(!u)return r;var o=n.P;if(!o)return-(1/0);e=o.site;var a=e.x,l=e.y,c=l-t;if(!c)return a;var f=a-r,s=1/u-1/c,h=f/c;return s?(-h+Math.sqrt(h*h-2*s*(f*f/(-2*c)-l+c/2+i-u/2)))/s+r:(r+a)/2}function Ie(n,t){var e=n.N;if(e)return Oe(e,t);var r=n.site;return r.y===t?r.x:1/0}function Ye(n){this.site=n,this.edges=[]}function Ze(n){for(var t,e,r,i,u,o,a,l,c,f,s=n[0][0],h=n[1][0],p=n[0][1],g=n[1][1],v=ul,d=v.length;d--;)if(u=v[d],u&&u.prepare())for(a=u.edges,l=a.length,o=0;l>o;)f=a[o].end(),r=f.x,i=f.y,c=a[++o%l].start(),t=c.x,e=c.y,(xo(r-t)>Uo||xo(i-e)>Uo)&&(a.splice(o,0,new tr(Qe(u.site,f,xo(r-s)Uo?{x:s,y:xo(t-s)Uo?{x:xo(e-g)Uo?{x:h,y:xo(t-h)Uo?{x:xo(e-p)=-jo)){var p=l*l+c*c,g=f*f+s*s,v=(s*p-c*g)/h,d=(l*g-f*p)/h,s=d+a,y=fl.pop()||new Xe;y.arc=n,y.site=i,y.x=v+o,y.y=s+Math.sqrt(v*v+d*d),y.cy=s,n.circle=y;for(var m=null,M=ll._;M;)if(y.yd||d>=a)return;if(h>g){if(u){if(u.y>=c)return}else u={x:d,y:l};e={x:d,y:c}}else{if(u){if(u.yr||r>1)if(h>g){if(u){if(u.y>=c)return}else u={x:(l-i)/r,y:l};e={x:(c-i)/r,y:c}}else{if(u){if(u.yp){if(u){if(u.x>=a)return}else u={x:o,y:r*o+i};e={x:a,y:r*a+i}}else{if(u){if(u.xu||s>o||r>h||i>p)){if(g=n.point){var g,v=t-n.x,d=e-n.y,y=v*v+d*d;if(l>y){var m=Math.sqrt(l=y);r=t-m,i=e-m,u=t+m,o=e+m,a=g}}for(var M=n.nodes,x=.5*(f+h),b=.5*(s+p),_=t>=x,w=e>=b,S=w<<1|_,k=S+4;k>S;++S)if(n=M[3&S])switch(3&S){case 0:c(n,f,s,x,b);break;case 1:c(n,x,s,h,b);break;case 2:c(n,f,b,x,p);break;case 3:c(n,x,b,h,p)}}}(n,r,i,u,o),a}function vr(n,t){n=ao.rgb(n),t=ao.rgb(t);var e=n.r,r=n.g,i=n.b,u=t.r-e,o=t.g-r,a=t.b-i;return function(n){return"#"+bn(Math.round(e+u*n))+bn(Math.round(r+o*n))+bn(Math.round(i+a*n))}}function dr(n,t){var e,r={},i={};for(e in n)e in t?r[e]=Mr(n[e],t[e]):i[e]=n[e];for(e in t)e in n||(i[e]=t[e]);return function(n){for(e in r)i[e]=r[e](n);return i}}function yr(n,t){return n=+n,t=+t,function(e){return n*(1-e)+t*e}}function mr(n,t){var e,r,i,u=hl.lastIndex=pl.lastIndex=0,o=-1,a=[],l=[];for(n+="",t+="";(e=hl.exec(n))&&(r=pl.exec(t));)(i=r.index)>u&&(i=t.slice(u,i),a[o]?a[o]+=i:a[++o]=i),(e=e[0])===(r=r[0])?a[o]?a[o]+=r:a[++o]=r:(a[++o]=null,l.push({i:o,x:yr(e,r)})),u=pl.lastIndex;return ur;++r)a[(e=l[r]).i]=e.x(n);return a.join("")})}function Mr(n,t){for(var e,r=ao.interpolators.length;--r>=0&&!(e=ao.interpolators[r](n,t)););return e}function xr(n,t){var e,r=[],i=[],u=n.length,o=t.length,a=Math.min(n.length,t.length);for(e=0;a>e;++e)r.push(Mr(n[e],t[e]));for(;u>e;++e)i[e]=n[e];for(;o>e;++e)i[e]=t[e];return function(n){for(e=0;a>e;++e)i[e]=r[e](n);return i}}function br(n){return function(t){return 0>=t?0:t>=1?1:n(t)}}function _r(n){return function(t){return 1-n(1-t)}}function wr(n){return function(t){return.5*(.5>t?n(2*t):2-n(2-2*t))}}function Sr(n){return n*n}function kr(n){return n*n*n}function Nr(n){if(0>=n)return 0;if(n>=1)return 1;var t=n*n,e=t*n;return 4*(.5>n?e:3*(n-t)+e-.75)}function Er(n){return function(t){return Math.pow(t,n)}}function Ar(n){return 1-Math.cos(n*Io)}function Cr(n){return Math.pow(2,10*(n-1))}function zr(n){return 1-Math.sqrt(1-n*n)}function Lr(n,t){var e;return arguments.length<2&&(t=.45),arguments.length?e=t/Ho*Math.asin(1/n):(n=1,e=t/4),function(r){return 1+n*Math.pow(2,-10*r)*Math.sin((r-e)*Ho/t)}}function qr(n){return n||(n=1.70158),function(t){return t*t*((n+1)*t-n)}}function Tr(n){return 1/2.75>n?7.5625*n*n:2/2.75>n?7.5625*(n-=1.5/2.75)*n+.75:2.5/2.75>n?7.5625*(n-=2.25/2.75)*n+.9375:7.5625*(n-=2.625/2.75)*n+.984375}function Rr(n,t){n=ao.hcl(n),t=ao.hcl(t);var e=n.h,r=n.c,i=n.l,u=t.h-e,o=t.c-r,a=t.l-i;return isNaN(o)&&(o=0,r=isNaN(r)?t.c:r),isNaN(u)?(u=0,e=isNaN(e)?t.h:e):u>180?u-=360:-180>u&&(u+=360),function(n){return sn(e+u*n,r+o*n,i+a*n)+""}}function Dr(n,t){n=ao.hsl(n),t=ao.hsl(t);var e=n.h,r=n.s,i=n.l,u=t.h-e,o=t.s-r,a=t.l-i;return isNaN(o)&&(o=0,r=isNaN(r)?t.s:r),isNaN(u)?(u=0,e=isNaN(e)?t.h:e):u>180?u-=360:-180>u&&(u+=360),function(n){return cn(e+u*n,r+o*n,i+a*n)+""}}function Pr(n,t){n=ao.lab(n),t=ao.lab(t);var e=n.l,r=n.a,i=n.b,u=t.l-e,o=t.a-r,a=t.b-i;return function(n){return pn(e+u*n,r+o*n,i+a*n)+""}}function Ur(n,t){return t-=n,function(e){return Math.round(n+t*e)}}function jr(n){var t=[n.a,n.b],e=[n.c,n.d],r=Hr(t),i=Fr(t,e),u=Hr(Or(e,t,-i))||0;t[0]*e[1]180?t+=360:t-n>180&&(n+=360),r.push({i:e.push(Ir(e)+"rotate(",null,")")-2,x:yr(n,t)})):t&&e.push(Ir(e)+"rotate("+t+")")}function Vr(n,t,e,r){n!==t?r.push({i:e.push(Ir(e)+"skewX(",null,")")-2,x:yr(n,t)}):t&&e.push(Ir(e)+"skewX("+t+")")}function Xr(n,t,e,r){if(n[0]!==t[0]||n[1]!==t[1]){var i=e.push(Ir(e)+"scale(",null,",",null,")");r.push({i:i-4,x:yr(n[0],t[0])},{i:i-2,x:yr(n[1],t[1])})}else 1===t[0]&&1===t[1]||e.push(Ir(e)+"scale("+t+")")}function $r(n,t){var e=[],r=[];return n=ao.transform(n),t=ao.transform(t),Yr(n.translate,t.translate,e,r),Zr(n.rotate,t.rotate,e,r),Vr(n.skew,t.skew,e,r),Xr(n.scale,t.scale,e,r),n=t=null,function(n){for(var t,i=-1,u=r.length;++i=0;)e.push(i[r])}function oi(n,t){for(var e=[n],r=[];null!=(n=e.pop());)if(r.push(n),(u=n.children)&&(i=u.length))for(var i,u,o=-1;++oe;++e)(t=n[e][1])>i&&(r=e,i=t);return r}function yi(n){return n.reduce(mi,0)}function mi(n,t){return n+t[1]}function Mi(n,t){return xi(n,Math.ceil(Math.log(t.length)/Math.LN2+1))}function xi(n,t){for(var e=-1,r=+n[0],i=(n[1]-r)/t,u=[];++e<=t;)u[e]=i*e+r;return u}function bi(n){return[ao.min(n),ao.max(n)]}function _i(n,t){return n.value-t.value}function wi(n,t){var e=n._pack_next;n._pack_next=t,t._pack_prev=n,t._pack_next=e,e._pack_prev=t}function Si(n,t){n._pack_next=t,t._pack_prev=n}function ki(n,t){var e=t.x-n.x,r=t.y-n.y,i=n.r+t.r;return.999*i*i>e*e+r*r}function Ni(n){function t(n){f=Math.min(n.x-n.r,f),s=Math.max(n.x+n.r,s),h=Math.min(n.y-n.r,h),p=Math.max(n.y+n.r,p)}if((e=n.children)&&(c=e.length)){var e,r,i,u,o,a,l,c,f=1/0,s=-(1/0),h=1/0,p=-(1/0);if(e.forEach(Ei),r=e[0],r.x=-r.r,r.y=0,t(r),c>1&&(i=e[1],i.x=i.r,i.y=0,t(i),c>2))for(u=e[2],zi(r,i,u),t(u),wi(r,u),r._pack_prev=u,wi(u,i),i=r._pack_next,o=3;c>o;o++){zi(r,i,u=e[o]);var g=0,v=1,d=1;for(a=i._pack_next;a!==i;a=a._pack_next,v++)if(ki(a,u)){g=1;break}if(1==g)for(l=r._pack_prev;l!==a._pack_prev&&!ki(l,u);l=l._pack_prev,d++);g?(d>v||v==d&&i.ro;o++)u=e[o],u.x-=y,u.y-=m,M=Math.max(M,u.r+Math.sqrt(u.x*u.x+u.y*u.y));n.r=M,e.forEach(Ai)}}function Ei(n){n._pack_next=n._pack_prev=n}function Ai(n){delete n._pack_next,delete n._pack_prev}function Ci(n,t,e,r){var i=n.children;if(n.x=t+=r*n.x,n.y=e+=r*n.y,n.r*=r,i)for(var u=-1,o=i.length;++u=0;)t=i[u],t.z+=e,t.m+=e,e+=t.s+(r+=t.c)}function Pi(n,t,e){return n.a.parent===t.parent?n.a:e}function Ui(n){return 1+ao.max(n,function(n){return n.y})}function ji(n){return n.reduce(function(n,t){return n+t.x},0)/n.length}function Fi(n){var t=n.children;return t&&t.length?Fi(t[0]):n}function Hi(n){var t,e=n.children;return e&&(t=e.length)?Hi(e[t-1]):n}function Oi(n){return{x:n.x,y:n.y,dx:n.dx,dy:n.dy}}function Ii(n,t){var e=n.x+t[3],r=n.y+t[0],i=n.dx-t[1]-t[3],u=n.dy-t[0]-t[2];return 0>i&&(e+=i/2,i=0),0>u&&(r+=u/2,u=0),{x:e,y:r,dx:i,dy:u}}function Yi(n){var t=n[0],e=n[n.length-1];return e>t?[t,e]:[e,t]}function Zi(n){return n.rangeExtent?n.rangeExtent():Yi(n.range())}function Vi(n,t,e,r){var i=e(n[0],n[1]),u=r(t[0],t[1]);return function(n){return u(i(n))}}function Xi(n,t){var e,r=0,i=n.length-1,u=n[r],o=n[i];return u>o&&(e=r,r=i,i=e,e=u,u=o,o=e),n[r]=t.floor(u),n[i]=t.ceil(o),n}function $i(n){return n?{floor:function(t){return Math.floor(t/n)*n},ceil:function(t){return Math.ceil(t/n)*n}}:Sl}function Bi(n,t,e,r){var i=[],u=[],o=0,a=Math.min(n.length,t.length)-1;for(n[a]2?Bi:Vi,l=r?Wr:Br;return o=i(n,t,l,e),a=i(t,n,l,Mr),u}function u(n){return o(n)}var o,a;return u.invert=function(n){return a(n)},u.domain=function(t){return arguments.length?(n=t.map(Number),i()):n},u.range=function(n){return arguments.length?(t=n,i()):t},u.rangeRound=function(n){return u.range(n).interpolate(Ur)},u.clamp=function(n){return arguments.length?(r=n,i()):r},u.interpolate=function(n){return arguments.length?(e=n,i()):e},u.ticks=function(t){return Qi(n,t)},u.tickFormat=function(t,e){return nu(n,t,e)},u.nice=function(t){return Gi(n,t),i()},u.copy=function(){return Wi(n,t,e,r)},i()}function Ji(n,t){return ao.rebind(n,t,"range","rangeRound","interpolate","clamp")}function Gi(n,t){return Xi(n,$i(Ki(n,t)[2])),Xi(n,$i(Ki(n,t)[2])),n}function Ki(n,t){null==t&&(t=10);var e=Yi(n),r=e[1]-e[0],i=Math.pow(10,Math.floor(Math.log(r/t)/Math.LN10)),u=t/r*i;return.15>=u?i*=10:.35>=u?i*=5:.75>=u&&(i*=2),e[0]=Math.ceil(e[0]/i)*i,e[1]=Math.floor(e[1]/i)*i+.5*i,e[2]=i,e}function Qi(n,t){return ao.range.apply(ao,Ki(n,t))}function nu(n,t,e){var r=Ki(n,t);if(e){var i=ha.exec(e);if(i.shift(),"s"===i[8]){var u=ao.formatPrefix(Math.max(xo(r[0]),xo(r[1])));return i[7]||(i[7]="."+tu(u.scale(r[2]))),i[8]="f",e=ao.format(i.join("")),function(n){return e(u.scale(n))+u.symbol}}i[7]||(i[7]="."+eu(i[8],r)),e=i.join("")}else e=",."+tu(r[2])+"f";return ao.format(e)}function tu(n){return-Math.floor(Math.log(n)/Math.LN10+.01)}function eu(n,t){var e=tu(t[2]);return n in kl?Math.abs(e-tu(Math.max(xo(t[0]),xo(t[1]))))+ +("e"!==n):e-2*("%"===n)}function ru(n,t,e,r){function i(n){return(e?Math.log(0>n?0:n):-Math.log(n>0?0:-n))/Math.log(t)}function u(n){return e?Math.pow(t,n):-Math.pow(t,-n)}function o(t){return n(i(t))}return o.invert=function(t){return u(n.invert(t))},o.domain=function(t){return arguments.length?(e=t[0]>=0,n.domain((r=t.map(Number)).map(i)),o):r},o.base=function(e){return arguments.length?(t=+e,n.domain(r.map(i)),o):t},o.nice=function(){var t=Xi(r.map(i),e?Math:El);return n.domain(t),r=t.map(u),o},o.ticks=function(){var n=Yi(r),o=[],a=n[0],l=n[1],c=Math.floor(i(a)),f=Math.ceil(i(l)),s=t%1?2:t;if(isFinite(f-c)){if(e){for(;f>c;c++)for(var h=1;s>h;h++)o.push(u(c)*h);o.push(u(c))}else for(o.push(u(c));c++0;h--)o.push(u(c)*h);for(c=0;o[c]l;f--);o=o.slice(c,f)}return o},o.tickFormat=function(n,e){if(!arguments.length)return Nl;arguments.length<2?e=Nl:"function"!=typeof e&&(e=ao.format(e));var r=Math.max(1,t*n/o.ticks().length);return function(n){var o=n/u(Math.round(i(n)));return t-.5>o*t&&(o*=t),r>=o?e(n):""}},o.copy=function(){return ru(n.copy(),t,e,r)},Ji(o,n)}function iu(n,t,e){function r(t){return n(i(t))}var i=uu(t),u=uu(1/t);return r.invert=function(t){return u(n.invert(t))},r.domain=function(t){return arguments.length?(n.domain((e=t.map(Number)).map(i)),r):e},r.ticks=function(n){return Qi(e,n)},r.tickFormat=function(n,t){return nu(e,n,t)},r.nice=function(n){return r.domain(Gi(e,n))},r.exponent=function(o){return arguments.length?(i=uu(t=o),u=uu(1/t),n.domain(e.map(i)),r):t},r.copy=function(){return iu(n.copy(),t,e)},Ji(r,n)}function uu(n){return function(t){return 0>t?-Math.pow(-t,n):Math.pow(t,n)}}function ou(n,t){function e(e){return u[((i.get(e)||("range"===t.t?i.set(e,n.push(e)):NaN))-1)%u.length]}function r(t,e){return ao.range(n.length).map(function(n){return t+e*n})}var i,u,o;return e.domain=function(r){if(!arguments.length)return n;n=[],i=new c;for(var u,o=-1,a=r.length;++oe?[NaN,NaN]:[e>0?a[e-1]:n[0],et?NaN:t/u+n,[t,t+1/u]},r.copy=function(){return lu(n,t,e)},i()}function cu(n,t){function e(e){return e>=e?t[ao.bisect(n,e)]:void 0}return e.domain=function(t){return arguments.length?(n=t,e):n},e.range=function(n){return arguments.length?(t=n,e):t},e.invertExtent=function(e){return e=t.indexOf(e),[n[e-1],n[e]]},e.copy=function(){return cu(n,t)},e}function fu(n){function t(n){return+n}return t.invert=t,t.domain=t.range=function(e){return arguments.length?(n=e.map(t),t):n},t.ticks=function(t){return Qi(n,t)},t.tickFormat=function(t,e){return nu(n,t,e)},t.copy=function(){return fu(n)},t}function su(){return 0}function hu(n){return n.innerRadius}function pu(n){return n.outerRadius}function gu(n){return n.startAngle}function vu(n){return n.endAngle}function du(n){return n&&n.padAngle}function yu(n,t,e,r){return(n-e)*t-(t-r)*n>0?0:1}function mu(n,t,e,r,i){var u=n[0]-t[0],o=n[1]-t[1],a=(i?r:-r)/Math.sqrt(u*u+o*o),l=a*o,c=-a*u,f=n[0]+l,s=n[1]+c,h=t[0]+l,p=t[1]+c,g=(f+h)/2,v=(s+p)/2,d=h-f,y=p-s,m=d*d+y*y,M=e-r,x=f*p-h*s,b=(0>y?-1:1)*Math.sqrt(Math.max(0,M*M*m-x*x)),_=(x*y-d*b)/m,w=(-x*d-y*b)/m,S=(x*y+d*b)/m,k=(-x*d+y*b)/m,N=_-g,E=w-v,A=S-g,C=k-v;return N*N+E*E>A*A+C*C&&(_=S,w=k),[[_-l,w-c],[_*e/M,w*e/M]]}function Mu(n){function t(t){function o(){c.push("M",u(n(f),a))}for(var l,c=[],f=[],s=-1,h=t.length,p=En(e),g=En(r);++s1?n.join("L"):n+"Z"}function bu(n){return n.join("L")+"Z"}function _u(n){for(var t=0,e=n.length,r=n[0],i=[r[0],",",r[1]];++t1&&i.push("H",r[0]),i.join("")}function wu(n){for(var t=0,e=n.length,r=n[0],i=[r[0],",",r[1]];++t1){a=t[1],u=n[l],l++,r+="C"+(i[0]+o[0])+","+(i[1]+o[1])+","+(u[0]-a[0])+","+(u[1]-a[1])+","+u[0]+","+u[1];for(var c=2;c9&&(i=3*t/Math.sqrt(i),o[a]=i*e,o[a+1]=i*r));for(a=-1;++a<=l;)i=(n[Math.min(l,a+1)][0]-n[Math.max(0,a-1)][0])/(6*(1+o[a]*o[a])),u.push([i||0,o[a]*i||0]);return u}function Fu(n){return n.length<3?xu(n):n[0]+Au(n,ju(n))}function Hu(n){for(var t,e,r,i=-1,u=n.length;++i=t?o(n-t):void(f.c=o)}function o(e){var i=g.active,u=g[i];u&&(u.timer.c=null,u.timer.t=NaN,--g.count,delete g[i],u.event&&u.event.interrupt.call(n,n.__data__,u.index));for(var o in g)if(r>+o){var c=g[o];c.timer.c=null,c.timer.t=NaN,--g.count,delete g[o]}f.c=a,qn(function(){return f.c&&a(e||1)&&(f.c=null,f.t=NaN),1},0,l),g.active=r,v.event&&v.event.start.call(n,n.__data__,t),p=[],v.tween.forEach(function(e,r){(r=r.call(n,n.__data__,t))&&p.push(r)}),h=v.ease,s=v.duration}function a(i){for(var u=i/s,o=h(u),a=p.length;a>0;)p[--a].call(n,o);return u>=1?(v.event&&v.event.end.call(n,n.__data__,t),--g.count?delete g[r]:delete n[e],1):void 0}var l,f,s,h,p,g=n[e]||(n[e]={active:0,count:0}),v=g[r];v||(l=i.time,f=qn(u,0,l),v=g[r]={tween:new c,time:l,timer:f,delay:i.delay,duration:i.duration,ease:i.ease,index:t},i=null,++g.count)}function no(n,t,e){n.attr("transform",function(n){var r=t(n);return"translate("+(isFinite(r)?r:e(n))+",0)"})}function to(n,t,e){n.attr("transform",function(n){var r=t(n);return"translate(0,"+(isFinite(r)?r:e(n))+")"})}function eo(n){return n.toISOString()}function ro(n,t,e){function r(t){return n(t)}function i(n,e){var r=n[1]-n[0],i=r/e,u=ao.bisect(Kl,i);return u==Kl.length?[t.year,Ki(n.map(function(n){return n/31536e6}),e)[2]]:u?t[i/Kl[u-1]1?{floor:function(t){for(;e(t=n.floor(t));)t=io(t-1);return t},ceil:function(t){for(;e(t=n.ceil(t));)t=io(+t+1);return t}}:n))},r.ticks=function(n,t){var e=Yi(r.domain()),u=null==n?i(e,10):"number"==typeof n?i(e,n):!n.range&&[{range:n},t];return u&&(n=u[0],t=u[1]),n.range(e[0],io(+e[1]+1),1>t?1:t)},r.tickFormat=function(){return e},r.copy=function(){return ro(n.copy(),t,e)},Ji(r,n)}function io(n){return new Date(n)}function uo(n){return JSON.parse(n.responseText)}function oo(n){var t=fo.createRange();return t.selectNode(fo.body),t.createContextualFragment(n.responseText)}var ao={version:"3.5.17"},lo=[].slice,co=function(n){return lo.call(n)},fo=this.document;if(fo)try{co(fo.documentElement.childNodes)[0].nodeType}catch(so){co=function(n){for(var t=n.length,e=new Array(t);t--;)e[t]=n[t];return e}}if(Date.now||(Date.now=function(){return+new Date}),fo)try{fo.createElement("DIV").style.setProperty("opacity",0,"")}catch(ho){var po=this.Element.prototype,go=po.setAttribute,vo=po.setAttributeNS,yo=this.CSSStyleDeclaration.prototype,mo=yo.setProperty;po.setAttribute=function(n,t){go.call(this,n,t+"")},po.setAttributeNS=function(n,t,e){vo.call(this,n,t,e+"")},yo.setProperty=function(n,t,e){mo.call(this,n,t+"",e)}}ao.ascending=e,ao.descending=function(n,t){return n>t?-1:t>n?1:t>=n?0:NaN},ao.min=function(n,t){var e,r,i=-1,u=n.length;if(1===arguments.length){for(;++i=r){e=r;break}for(;++ir&&(e=r)}else{for(;++i=r){e=r;break}for(;++ir&&(e=r)}return e},ao.max=function(n,t){var e,r,i=-1,u=n.length;if(1===arguments.length){for(;++i=r){e=r;break}for(;++ie&&(e=r)}else{for(;++i=r){e=r;break}for(;++ie&&(e=r)}return e},ao.extent=function(n,t){var e,r,i,u=-1,o=n.length;if(1===arguments.length){for(;++u=r){e=i=r;break}for(;++ur&&(e=r),r>i&&(i=r))}else{for(;++u=r){e=i=r;break}for(;++ur&&(e=r),r>i&&(i=r))}return[e,i]},ao.sum=function(n,t){var e,r=0,u=n.length,o=-1;if(1===arguments.length)for(;++o1?l/(f-1):void 0},ao.deviation=function(){var n=ao.variance.apply(this,arguments);return n?Math.sqrt(n):n};var Mo=u(e);ao.bisectLeft=Mo.left,ao.bisect=ao.bisectRight=Mo.right,ao.bisector=function(n){return u(1===n.length?function(t,r){return e(n(t),r)}:n)},ao.shuffle=function(n,t,e){(u=arguments.length)<3&&(e=n.length,2>u&&(t=0));for(var r,i,u=e-t;u;)i=Math.random()*u--|0,r=n[u+t],n[u+t]=n[i+t],n[i+t]=r;return n},ao.permute=function(n,t){for(var e=t.length,r=new Array(e);e--;)r[e]=n[t[e]];return r},ao.pairs=function(n){for(var t,e=0,r=n.length-1,i=n[0],u=new Array(0>r?0:r);r>e;)u[e]=[t=i,i=n[++e]];return u},ao.transpose=function(n){if(!(i=n.length))return[];for(var t=-1,e=ao.min(n,o),r=new Array(e);++t=0;)for(r=n[i],t=r.length;--t>=0;)e[--o]=r[t];return e};var xo=Math.abs;ao.range=function(n,t,e){if(arguments.length<3&&(e=1,arguments.length<2&&(t=n,n=0)),(t-n)/e===1/0)throw new Error("infinite range");var r,i=[],u=a(xo(e)),o=-1;if(n*=u,t*=u,e*=u,0>e)for(;(r=n+e*++o)>t;)i.push(r/u);else for(;(r=n+e*++o)=u.length)return r?r.call(i,o):e?o.sort(e):o;for(var l,f,s,h,p=-1,g=o.length,v=u[a++],d=new c;++p=u.length)return n;var r=[],i=o[e++];return n.forEach(function(n,i){r.push({key:n,values:t(i,e)})}),i?r.sort(function(n,t){return i(n.key,t.key)}):r}var e,r,i={},u=[],o=[];return i.map=function(t,e){return n(e,t,0)},i.entries=function(e){return t(n(ao.map,e,0),0)},i.key=function(n){return u.push(n),i},i.sortKeys=function(n){return o[u.length-1]=n,i},i.sortValues=function(n){return e=n,i},i.rollup=function(n){return r=n,i},i},ao.set=function(n){var t=new y;if(n)for(var e=0,r=n.length;r>e;++e)t.add(n[e]);return t},l(y,{has:h,add:function(n){return this._[f(n+="")]=!0,n},remove:p,values:g,size:v,empty:d,forEach:function(n){for(var t in this._)n.call(this,s(t))}}),ao.behavior={},ao.rebind=function(n,t){for(var e,r=1,i=arguments.length;++r=0&&(r=n.slice(e+1),n=n.slice(0,e)),n)return arguments.length<2?this[n].on(r):this[n].on(r,t);if(2===arguments.length){if(null==t)for(n in this)this.hasOwnProperty(n)&&this[n].on(r,null);return this}},ao.event=null,ao.requote=function(n){return n.replace(So,"\\$&")};var So=/[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g,ko={}.__proto__?function(n,t){n.__proto__=t}:function(n,t){for(var e in t)n[e]=t[e]},No=function(n,t){return t.querySelector(n)},Eo=function(n,t){return t.querySelectorAll(n)},Ao=function(n,t){var e=n.matches||n[x(n,"matchesSelector")];return(Ao=function(n,t){return e.call(n,t)})(n,t)};"function"==typeof Sizzle&&(No=function(n,t){return Sizzle(n,t)[0]||null},Eo=Sizzle,Ao=Sizzle.matchesSelector),ao.selection=function(){return ao.select(fo.documentElement)};var Co=ao.selection.prototype=[];Co.select=function(n){var t,e,r,i,u=[];n=A(n);for(var o=-1,a=this.length;++o=0&&"xmlns"!==(e=n.slice(0,t))&&(n=n.slice(t+1)),Lo.hasOwnProperty(e)?{space:Lo[e],local:n}:n}},Co.attr=function(n,t){if(arguments.length<2){if("string"==typeof n){var e=this.node();return n=ao.ns.qualify(n),n.local?e.getAttributeNS(n.space,n.local):e.getAttribute(n)}for(t in n)this.each(z(t,n[t]));return this}return this.each(z(n,t))},Co.classed=function(n,t){if(arguments.length<2){if("string"==typeof n){var e=this.node(),r=(n=T(n)).length,i=-1;if(t=e.classList){for(;++ii){if("string"!=typeof n){2>i&&(e="");for(r in n)this.each(P(r,n[r],e));return this}if(2>i){var u=this.node();return t(u).getComputedStyle(u,null).getPropertyValue(n)}r=""}return this.each(P(n,e,r))},Co.property=function(n,t){if(arguments.length<2){if("string"==typeof n)return this.node()[n];for(t in n)this.each(U(t,n[t]));return this}return this.each(U(n,t))},Co.text=function(n){return arguments.length?this.each("function"==typeof n?function(){var t=n.apply(this,arguments);this.textContent=null==t?"":t}:null==n?function(){this.textContent=""}:function(){this.textContent=n}):this.node().textContent},Co.html=function(n){return arguments.length?this.each("function"==typeof n?function(){var t=n.apply(this,arguments);this.innerHTML=null==t?"":t}:null==n?function(){this.innerHTML=""}:function(){this.innerHTML=n}):this.node().innerHTML},Co.append=function(n){return n=j(n),this.select(function(){return this.appendChild(n.apply(this,arguments))})},Co.insert=function(n,t){return n=j(n),t=A(t),this.select(function(){return this.insertBefore(n.apply(this,arguments),t.apply(this,arguments)||null)})},Co.remove=function(){return this.each(F)},Co.data=function(n,t){function e(n,e){var r,i,u,o=n.length,s=e.length,h=Math.min(o,s),p=new Array(s),g=new Array(s),v=new Array(o);if(t){var d,y=new c,m=new Array(o);for(r=-1;++rr;++r)g[r]=H(e[r]);for(;o>r;++r)v[r]=n[r]}g.update=p,g.parentNode=p.parentNode=v.parentNode=n.parentNode,a.push(g),l.push(p),f.push(v)}var r,i,u=-1,o=this.length;if(!arguments.length){for(n=new Array(o=(r=this[0]).length);++uu;u++){i.push(t=[]),t.parentNode=(e=this[u]).parentNode;for(var a=0,l=e.length;l>a;a++)(r=e[a])&&n.call(r,r.__data__,a,u)&&t.push(r)}return E(i)},Co.order=function(){for(var n=-1,t=this.length;++n=0;)(e=r[i])&&(u&&u!==e.nextSibling&&u.parentNode.insertBefore(e,u),u=e);return this},Co.sort=function(n){n=I.apply(this,arguments);for(var t=-1,e=this.length;++tn;n++)for(var e=this[n],r=0,i=e.length;i>r;r++){var u=e[r];if(u)return u}return null},Co.size=function(){var n=0;return Y(this,function(){++n}),n};var qo=[];ao.selection.enter=Z,ao.selection.enter.prototype=qo,qo.append=Co.append,qo.empty=Co.empty,qo.node=Co.node,qo.call=Co.call,qo.size=Co.size,qo.select=function(n){for(var t,e,r,i,u,o=[],a=-1,l=this.length;++ar){if("string"!=typeof n){2>r&&(t=!1);for(e in n)this.each(X(e,n[e],t));return this}if(2>r)return(r=this.node()["__on"+n])&&r._;e=!1}return this.each(X(n,t,e))};var To=ao.map({mouseenter:"mouseover",mouseleave:"mouseout"});fo&&To.forEach(function(n){"on"+n in fo&&To.remove(n)});var Ro,Do=0;ao.mouse=function(n){return J(n,k())};var Po=this.navigator&&/WebKit/.test(this.navigator.userAgent)?-1:0;ao.touch=function(n,t,e){if(arguments.length<3&&(e=t,t=k().changedTouches),t)for(var r,i=0,u=t.length;u>i;++i)if((r=t[i]).identifier===e)return J(n,r)},ao.behavior.drag=function(){function n(){this.on("mousedown.drag",u).on("touchstart.drag",o)}function e(n,t,e,u,o){return function(){function a(){var n,e,r=t(h,v);r&&(n=r[0]-M[0],e=r[1]-M[1],g|=n|e,M=r,p({type:"drag",x:r[0]+c[0],y:r[1]+c[1],dx:n,dy:e}))}function l(){t(h,v)&&(y.on(u+d,null).on(o+d,null),m(g),p({type:"dragend"}))}var c,f=this,s=ao.event.target.correspondingElement||ao.event.target,h=f.parentNode,p=r.of(f,arguments),g=0,v=n(),d=".drag"+(null==v?"":"-"+v),y=ao.select(e(s)).on(u+d,a).on(o+d,l),m=W(s),M=t(h,v);i?(c=i.apply(f,arguments),c=[c.x-M[0],c.y-M[1]]):c=[0,0],p({type:"dragstart"})}}var r=N(n,"drag","dragstart","dragend"),i=null,u=e(b,ao.mouse,t,"mousemove","mouseup"),o=e(G,ao.touch,m,"touchmove","touchend");return n.origin=function(t){return arguments.length?(i=t,n):i},ao.rebind(n,r,"on")},ao.touches=function(n,t){return arguments.length<2&&(t=k().touches),t?co(t).map(function(t){var e=J(n,t);return e.identifier=t.identifier,e}):[]};var Uo=1e-6,jo=Uo*Uo,Fo=Math.PI,Ho=2*Fo,Oo=Ho-Uo,Io=Fo/2,Yo=Fo/180,Zo=180/Fo,Vo=Math.SQRT2,Xo=2,$o=4;ao.interpolateZoom=function(n,t){var e,r,i=n[0],u=n[1],o=n[2],a=t[0],l=t[1],c=t[2],f=a-i,s=l-u,h=f*f+s*s;if(jo>h)r=Math.log(c/o)/Vo,e=function(n){return[i+n*f,u+n*s,o*Math.exp(Vo*n*r)]};else{var p=Math.sqrt(h),g=(c*c-o*o+$o*h)/(2*o*Xo*p),v=(c*c-o*o-$o*h)/(2*c*Xo*p),d=Math.log(Math.sqrt(g*g+1)-g),y=Math.log(Math.sqrt(v*v+1)-v);r=(y-d)/Vo,e=function(n){var t=n*r,e=rn(d),a=o/(Xo*p)*(e*un(Vo*t+d)-en(d));return[i+a*f,u+a*s,o*e/rn(Vo*t+d)]}}return e.duration=1e3*r,e},ao.behavior.zoom=function(){function n(n){n.on(L,s).on(Wo+".zoom",p).on("dblclick.zoom",g).on(R,h)}function e(n){return[(n[0]-k.x)/k.k,(n[1]-k.y)/k.k]}function r(n){return[n[0]*k.k+k.x,n[1]*k.k+k.y]}function i(n){k.k=Math.max(A[0],Math.min(A[1],n))}function u(n,t){t=r(t),k.x+=n[0]-t[0],k.y+=n[1]-t[1]}function o(t,e,r,o){t.__chart__={x:k.x,y:k.y,k:k.k},i(Math.pow(2,o)),u(d=e,r),t=ao.select(t),C>0&&(t=t.transition().duration(C)),t.call(n.event)}function a(){b&&b.domain(x.range().map(function(n){return(n-k.x)/k.k}).map(x.invert)),w&&w.domain(_.range().map(function(n){return(n-k.y)/k.k}).map(_.invert))}function l(n){z++||n({type:"zoomstart"})}function c(n){a(),n({type:"zoom",scale:k.k,translate:[k.x,k.y]})}function f(n){--z||(n({type:"zoomend"}),d=null)}function s(){function n(){a=1,u(ao.mouse(i),h),c(o)}function r(){s.on(q,null).on(T,null),p(a),f(o)}var i=this,o=D.of(i,arguments),a=0,s=ao.select(t(i)).on(q,n).on(T,r),h=e(ao.mouse(i)),p=W(i);Il.call(i),l(o)}function h(){function n(){var n=ao.touches(g);return p=k.k,n.forEach(function(n){n.identifier in d&&(d[n.identifier]=e(n))}),n}function t(){var t=ao.event.target;ao.select(t).on(x,r).on(b,a),_.push(t);for(var e=ao.event.changedTouches,i=0,u=e.length;u>i;++i)d[e[i].identifier]=null;var l=n(),c=Date.now();if(1===l.length){if(500>c-M){var f=l[0];o(g,f,d[f.identifier],Math.floor(Math.log(k.k)/Math.LN2)+1),S()}M=c}else if(l.length>1){var f=l[0],s=l[1],h=f[0]-s[0],p=f[1]-s[1];y=h*h+p*p}}function r(){var n,t,e,r,o=ao.touches(g);Il.call(g);for(var a=0,l=o.length;l>a;++a,r=null)if(e=o[a],r=d[e.identifier]){if(t)break;n=e,t=r}if(r){var f=(f=e[0]-n[0])*f+(f=e[1]-n[1])*f,s=y&&Math.sqrt(f/y);n=[(n[0]+e[0])/2,(n[1]+e[1])/2],t=[(t[0]+r[0])/2,(t[1]+r[1])/2],i(s*p)}M=null,u(n,t),c(v)}function a(){if(ao.event.touches.length){for(var t=ao.event.changedTouches,e=0,r=t.length;r>e;++e)delete d[t[e].identifier];for(var i in d)return void n()}ao.selectAll(_).on(m,null),w.on(L,s).on(R,h),N(),f(v)}var p,g=this,v=D.of(g,arguments),d={},y=0,m=".zoom-"+ao.event.changedTouches[0].identifier,x="touchmove"+m,b="touchend"+m,_=[],w=ao.select(g),N=W(g);t(),l(v),w.on(L,null).on(R,t)}function p(){var n=D.of(this,arguments);m?clearTimeout(m):(Il.call(this),v=e(d=y||ao.mouse(this)),l(n)),m=setTimeout(function(){m=null,f(n)},50),S(),i(Math.pow(2,.002*Bo())*k.k),u(d,v),c(n)}function g(){var n=ao.mouse(this),t=Math.log(k.k)/Math.LN2;o(this,n,e(n),ao.event.shiftKey?Math.ceil(t)-1:Math.floor(t)+1)}var v,d,y,m,M,x,b,_,w,k={x:0,y:0,k:1},E=[960,500],A=Jo,C=250,z=0,L="mousedown.zoom",q="mousemove.zoom",T="mouseup.zoom",R="touchstart.zoom",D=N(n,"zoomstart","zoom","zoomend");return Wo||(Wo="onwheel"in fo?(Bo=function(){return-ao.event.deltaY*(ao.event.deltaMode?120:1)},"wheel"):"onmousewheel"in fo?(Bo=function(){return ao.event.wheelDelta},"mousewheel"):(Bo=function(){return-ao.event.detail},"MozMousePixelScroll")),n.event=function(n){n.each(function(){var n=D.of(this,arguments),t=k;Hl?ao.select(this).transition().each("start.zoom",function(){k=this.__chart__||{x:0,y:0,k:1},l(n)}).tween("zoom:zoom",function(){var e=E[0],r=E[1],i=d?d[0]:e/2,u=d?d[1]:r/2,o=ao.interpolateZoom([(i-k.x)/k.k,(u-k.y)/k.k,e/k.k],[(i-t.x)/t.k,(u-t.y)/t.k,e/t.k]);return function(t){var r=o(t),a=e/r[2];this.__chart__=k={x:i-r[0]*a,y:u-r[1]*a,k:a},c(n)}}).each("interrupt.zoom",function(){f(n)}).each("end.zoom",function(){f(n)}):(this.__chart__=k,l(n),c(n),f(n))})},n.translate=function(t){return arguments.length?(k={x:+t[0],y:+t[1],k:k.k},a(),n):[k.x,k.y]},n.scale=function(t){return arguments.length?(k={x:k.x,y:k.y,k:null},i(+t),a(),n):k.k},n.scaleExtent=function(t){return arguments.length?(A=null==t?Jo:[+t[0],+t[1]],n):A},n.center=function(t){return arguments.length?(y=t&&[+t[0],+t[1]],n):y},n.size=function(t){return arguments.length?(E=t&&[+t[0],+t[1]],n):E},n.duration=function(t){return arguments.length?(C=+t,n):C},n.x=function(t){return arguments.length?(b=t,x=t.copy(),k={x:0,y:0,k:1},n):b},n.y=function(t){return arguments.length?(w=t,_=t.copy(),k={x:0,y:0,k:1},n):w},ao.rebind(n,D,"on")};var Bo,Wo,Jo=[0,1/0];ao.color=an,an.prototype.toString=function(){return this.rgb()+""},ao.hsl=ln;var Go=ln.prototype=new an;Go.brighter=function(n){return n=Math.pow(.7,arguments.length?n:1),new ln(this.h,this.s,this.l/n)},Go.darker=function(n){return n=Math.pow(.7,arguments.length?n:1),new ln(this.h,this.s,n*this.l)},Go.rgb=function(){return cn(this.h,this.s,this.l)},ao.hcl=fn;var Ko=fn.prototype=new an;Ko.brighter=function(n){return new fn(this.h,this.c,Math.min(100,this.l+Qo*(arguments.length?n:1)))},Ko.darker=function(n){return new fn(this.h,this.c,Math.max(0,this.l-Qo*(arguments.length?n:1)))},Ko.rgb=function(){return sn(this.h,this.c,this.l).rgb()},ao.lab=hn;var Qo=18,na=.95047,ta=1,ea=1.08883,ra=hn.prototype=new an;ra.brighter=function(n){return new hn(Math.min(100,this.l+Qo*(arguments.length?n:1)),this.a,this.b)},ra.darker=function(n){return new hn(Math.max(0,this.l-Qo*(arguments.length?n:1)),this.a,this.b)},ra.rgb=function(){return pn(this.l,this.a,this.b)},ao.rgb=mn;var ia=mn.prototype=new an;ia.brighter=function(n){n=Math.pow(.7,arguments.length?n:1);var t=this.r,e=this.g,r=this.b,i=30;return t||e||r?(t&&i>t&&(t=i),e&&i>e&&(e=i),r&&i>r&&(r=i),new mn(Math.min(255,t/n),Math.min(255,e/n),Math.min(255,r/n))):new mn(i,i,i)},ia.darker=function(n){return n=Math.pow(.7,arguments.length?n:1),new mn(n*this.r,n*this.g,n*this.b)},ia.hsl=function(){return wn(this.r,this.g,this.b)},ia.toString=function(){return"#"+bn(this.r)+bn(this.g)+bn(this.b)};var ua=ao.map({aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074});ua.forEach(function(n,t){ua.set(n,Mn(t))}),ao.functor=En,ao.xhr=An(m),ao.dsv=function(n,t){function e(n,e,u){arguments.length<3&&(u=e,e=null);var o=Cn(n,t,null==e?r:i(e),u);return o.row=function(n){return arguments.length?o.response(null==(e=n)?r:i(n)):e},o}function r(n){return e.parse(n.responseText)}function i(n){return function(t){return e.parse(t.responseText,n)}}function u(t){return t.map(o).join(n)}function o(n){return a.test(n)?'"'+n.replace(/\"/g,'""')+'"':n}var a=new RegExp('["'+n+"\n]"),l=n.charCodeAt(0);return e.parse=function(n,t){var r;return e.parseRows(n,function(n,e){if(r)return r(n,e-1);var i=new Function("d","return {"+n.map(function(n,t){return JSON.stringify(n)+": d["+t+"]"}).join(",")+"}");r=t?function(n,e){return t(i(n),e)}:i})},e.parseRows=function(n,t){function e(){if(f>=c)return o;if(i)return i=!1,u;var t=f;if(34===n.charCodeAt(t)){for(var e=t;e++f;){var r=n.charCodeAt(f++),a=1;if(10===r)i=!0;else if(13===r)i=!0,10===n.charCodeAt(f)&&(++f,++a);else if(r!==l)continue;return n.slice(t,f-a)}return n.slice(t)}for(var r,i,u={},o={},a=[],c=n.length,f=0,s=0;(r=e())!==o;){for(var h=[];r!==u&&r!==o;)h.push(r),r=e();t&&null==(h=t(h,s++))||a.push(h)}return a},e.format=function(t){if(Array.isArray(t[0]))return e.formatRows(t);var r=new y,i=[];return t.forEach(function(n){for(var t in n)r.has(t)||i.push(r.add(t))}),[i.map(o).join(n)].concat(t.map(function(t){return i.map(function(n){return o(t[n])}).join(n)})).join("\n")},e.formatRows=function(n){return n.map(u).join("\n")},e},ao.csv=ao.dsv(",","text/csv"),ao.tsv=ao.dsv(" ","text/tab-separated-values");var oa,aa,la,ca,fa=this[x(this,"requestAnimationFrame")]||function(n){setTimeout(n,17)};ao.timer=function(){qn.apply(this,arguments)},ao.timer.flush=function(){Rn(),Dn()},ao.round=function(n,t){return t?Math.round(n*(t=Math.pow(10,t)))/t:Math.round(n)};var sa=["y","z","a","f","p","n","\xb5","m","","k","M","G","T","P","E","Z","Y"].map(Un);ao.formatPrefix=function(n,t){var e=0;return(n=+n)&&(0>n&&(n*=-1),t&&(n=ao.round(n,Pn(n,t))),e=1+Math.floor(1e-12+Math.log(n)/Math.LN10),e=Math.max(-24,Math.min(24,3*Math.floor((e-1)/3)))),sa[8+e/3]};var ha=/(?:([^{])?([<>=^]))?([+\- ])?([$#])?(0)?(\d+)?(,)?(\.-?\d+)?([a-z%])?/i,pa=ao.map({b:function(n){return n.toString(2)},c:function(n){return String.fromCharCode(n)},o:function(n){return n.toString(8)},x:function(n){return n.toString(16)},X:function(n){return n.toString(16).toUpperCase()},g:function(n,t){return n.toPrecision(t)},e:function(n,t){return n.toExponential(t)},f:function(n,t){return n.toFixed(t)},r:function(n,t){return(n=ao.round(n,Pn(n,t))).toFixed(Math.max(0,Math.min(20,Pn(n*(1+1e-15),t))))}}),ga=ao.time={},va=Date;Hn.prototype={getDate:function(){return this._.getUTCDate()},getDay:function(){return this._.getUTCDay()},getFullYear:function(){return this._.getUTCFullYear()},getHours:function(){return this._.getUTCHours()},getMilliseconds:function(){return this._.getUTCMilliseconds()},getMinutes:function(){return this._.getUTCMinutes()},getMonth:function(){return this._.getUTCMonth()},getSeconds:function(){return this._.getUTCSeconds()},getTime:function(){return this._.getTime()},getTimezoneOffset:function(){return 0},valueOf:function(){return this._.valueOf()},setDate:function(){da.setUTCDate.apply(this._,arguments)},setDay:function(){da.setUTCDay.apply(this._,arguments)},setFullYear:function(){da.setUTCFullYear.apply(this._,arguments)},setHours:function(){da.setUTCHours.apply(this._,arguments)},setMilliseconds:function(){da.setUTCMilliseconds.apply(this._,arguments)},setMinutes:function(){da.setUTCMinutes.apply(this._,arguments)},setMonth:function(){da.setUTCMonth.apply(this._,arguments)},setSeconds:function(){da.setUTCSeconds.apply(this._,arguments)},setTime:function(){da.setTime.apply(this._,arguments)}};var da=Date.prototype;ga.year=On(function(n){return n=ga.day(n),n.setMonth(0,1),n},function(n,t){n.setFullYear(n.getFullYear()+t)},function(n){return n.getFullYear()}),ga.years=ga.year.range,ga.years.utc=ga.year.utc.range,ga.day=On(function(n){var t=new va(2e3,0);return t.setFullYear(n.getFullYear(),n.getMonth(),n.getDate()),t},function(n,t){n.setDate(n.getDate()+t)},function(n){return n.getDate()-1}),ga.days=ga.day.range,ga.days.utc=ga.day.utc.range,ga.dayOfYear=function(n){var t=ga.year(n);return Math.floor((n-t-6e4*(n.getTimezoneOffset()-t.getTimezoneOffset()))/864e5)},["sunday","monday","tuesday","wednesday","thursday","friday","saturday"].forEach(function(n,t){t=7-t;var e=ga[n]=On(function(n){return(n=ga.day(n)).setDate(n.getDate()-(n.getDay()+t)%7),n},function(n,t){n.setDate(n.getDate()+7*Math.floor(t))},function(n){var e=ga.year(n).getDay();return Math.floor((ga.dayOfYear(n)+(e+t)%7)/7)-(e!==t)});ga[n+"s"]=e.range,ga[n+"s"].utc=e.utc.range,ga[n+"OfYear"]=function(n){var e=ga.year(n).getDay();return Math.floor((ga.dayOfYear(n)+(e+t)%7)/7)}}),ga.week=ga.sunday,ga.weeks=ga.sunday.range,ga.weeks.utc=ga.sunday.utc.range,ga.weekOfYear=ga.sundayOfYear;var ya={"-":"",_:" ",0:"0"},ma=/^\s*\d+/,Ma=/^%/;ao.locale=function(n){return{numberFormat:jn(n),timeFormat:Yn(n)}};var xa=ao.locale({decimal:".",thousands:",",grouping:[3],currency:["$",""],dateTime:"%a %b %e %X %Y",date:"%m/%d/%Y",time:"%H:%M:%S",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"], +shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});ao.format=xa.numberFormat,ao.geo={},ft.prototype={s:0,t:0,add:function(n){st(n,this.t,ba),st(ba.s,this.s,this),this.s?this.t+=ba.t:this.s=ba.t},reset:function(){this.s=this.t=0},valueOf:function(){return this.s}};var ba=new ft;ao.geo.stream=function(n,t){n&&_a.hasOwnProperty(n.type)?_a[n.type](n,t):ht(n,t)};var _a={Feature:function(n,t){ht(n.geometry,t)},FeatureCollection:function(n,t){for(var e=n.features,r=-1,i=e.length;++rn?4*Fo+n:n,Na.lineStart=Na.lineEnd=Na.point=b}};ao.geo.bounds=function(){function n(n,t){M.push(x=[f=n,h=n]),s>t&&(s=t),t>p&&(p=t)}function t(t,e){var r=dt([t*Yo,e*Yo]);if(y){var i=mt(y,r),u=[i[1],-i[0],0],o=mt(u,i);bt(o),o=_t(o);var l=t-g,c=l>0?1:-1,v=o[0]*Zo*c,d=xo(l)>180;if(d^(v>c*g&&c*t>v)){var m=o[1]*Zo;m>p&&(p=m)}else if(v=(v+360)%360-180,d^(v>c*g&&c*t>v)){var m=-o[1]*Zo;s>m&&(s=m)}else s>e&&(s=e),e>p&&(p=e);d?g>t?a(f,t)>a(f,h)&&(h=t):a(t,h)>a(f,h)&&(f=t):h>=f?(f>t&&(f=t),t>h&&(h=t)):t>g?a(f,t)>a(f,h)&&(h=t):a(t,h)>a(f,h)&&(f=t)}else n(t,e);y=r,g=t}function e(){b.point=t}function r(){x[0]=f,x[1]=h,b.point=n,y=null}function i(n,e){if(y){var r=n-g;m+=xo(r)>180?r+(r>0?360:-360):r}else v=n,d=e;Na.point(n,e),t(n,e)}function u(){Na.lineStart()}function o(){i(v,d),Na.lineEnd(),xo(m)>Uo&&(f=-(h=180)),x[0]=f,x[1]=h,y=null}function a(n,t){return(t-=n)<0?t+360:t}function l(n,t){return n[0]-t[0]}function c(n,t){return t[0]<=t[1]?t[0]<=n&&n<=t[1]:nka?(f=-(h=180),s=-(p=90)):m>Uo?p=90:-Uo>m&&(s=-90),x[0]=f,x[1]=h}};return function(n){p=h=-(f=s=1/0),M=[],ao.geo.stream(n,b);var t=M.length;if(t){M.sort(l);for(var e,r=1,i=M[0],u=[i];t>r;++r)e=M[r],c(e[0],i)||c(e[1],i)?(a(i[0],e[1])>a(i[0],i[1])&&(i[1]=e[1]),a(e[0],i[1])>a(i[0],i[1])&&(i[0]=e[0])):u.push(i=e);for(var o,e,g=-(1/0),t=u.length-1,r=0,i=u[t];t>=r;i=e,++r)e=u[r],(o=a(i[1],e[0]))>g&&(g=o,f=e[0],h=i[1])}return M=x=null,f===1/0||s===1/0?[[NaN,NaN],[NaN,NaN]]:[[f,s],[h,p]]}}(),ao.geo.centroid=function(n){Ea=Aa=Ca=za=La=qa=Ta=Ra=Da=Pa=Ua=0,ao.geo.stream(n,ja);var t=Da,e=Pa,r=Ua,i=t*t+e*e+r*r;return jo>i&&(t=qa,e=Ta,r=Ra,Uo>Aa&&(t=Ca,e=za,r=La),i=t*t+e*e+r*r,jo>i)?[NaN,NaN]:[Math.atan2(e,t)*Zo,tn(r/Math.sqrt(i))*Zo]};var Ea,Aa,Ca,za,La,qa,Ta,Ra,Da,Pa,Ua,ja={sphere:b,point:St,lineStart:Nt,lineEnd:Et,polygonStart:function(){ja.lineStart=At},polygonEnd:function(){ja.lineStart=Nt}},Fa=Rt(zt,jt,Ht,[-Fo,-Fo/2]),Ha=1e9;ao.geo.clipExtent=function(){var n,t,e,r,i,u,o={stream:function(n){return i&&(i.valid=!1),i=u(n),i.valid=!0,i},extent:function(a){return arguments.length?(u=Zt(n=+a[0][0],t=+a[0][1],e=+a[1][0],r=+a[1][1]),i&&(i.valid=!1,i=null),o):[[n,t],[e,r]]}};return o.extent([[0,0],[960,500]])},(ao.geo.conicEqualArea=function(){return Vt(Xt)}).raw=Xt,ao.geo.albers=function(){return ao.geo.conicEqualArea().rotate([96,0]).center([-.6,38.7]).parallels([29.5,45.5]).scale(1070)},ao.geo.albersUsa=function(){function n(n){var u=n[0],o=n[1];return t=null,e(u,o),t||(r(u,o),t)||i(u,o),t}var t,e,r,i,u=ao.geo.albers(),o=ao.geo.conicEqualArea().rotate([154,0]).center([-2,58.5]).parallels([55,65]),a=ao.geo.conicEqualArea().rotate([157,0]).center([-3,19.9]).parallels([8,18]),l={point:function(n,e){t=[n,e]}};return n.invert=function(n){var t=u.scale(),e=u.translate(),r=(n[0]-e[0])/t,i=(n[1]-e[1])/t;return(i>=.12&&.234>i&&r>=-.425&&-.214>r?o:i>=.166&&.234>i&&r>=-.214&&-.115>r?a:u).invert(n)},n.stream=function(n){var t=u.stream(n),e=o.stream(n),r=a.stream(n);return{point:function(n,i){t.point(n,i),e.point(n,i),r.point(n,i)},sphere:function(){t.sphere(),e.sphere(),r.sphere()},lineStart:function(){t.lineStart(),e.lineStart(),r.lineStart()},lineEnd:function(){t.lineEnd(),e.lineEnd(),r.lineEnd()},polygonStart:function(){t.polygonStart(),e.polygonStart(),r.polygonStart()},polygonEnd:function(){t.polygonEnd(),e.polygonEnd(),r.polygonEnd()}}},n.precision=function(t){return arguments.length?(u.precision(t),o.precision(t),a.precision(t),n):u.precision()},n.scale=function(t){return arguments.length?(u.scale(t),o.scale(.35*t),a.scale(t),n.translate(u.translate())):u.scale()},n.translate=function(t){if(!arguments.length)return u.translate();var c=u.scale(),f=+t[0],s=+t[1];return e=u.translate(t).clipExtent([[f-.455*c,s-.238*c],[f+.455*c,s+.238*c]]).stream(l).point,r=o.translate([f-.307*c,s+.201*c]).clipExtent([[f-.425*c+Uo,s+.12*c+Uo],[f-.214*c-Uo,s+.234*c-Uo]]).stream(l).point,i=a.translate([f-.205*c,s+.212*c]).clipExtent([[f-.214*c+Uo,s+.166*c+Uo],[f-.115*c-Uo,s+.234*c-Uo]]).stream(l).point,n},n.scale(1070)};var Oa,Ia,Ya,Za,Va,Xa,$a={point:b,lineStart:b,lineEnd:b,polygonStart:function(){Ia=0,$a.lineStart=$t},polygonEnd:function(){$a.lineStart=$a.lineEnd=$a.point=b,Oa+=xo(Ia/2)}},Ba={point:Bt,lineStart:b,lineEnd:b,polygonStart:b,polygonEnd:b},Wa={point:Gt,lineStart:Kt,lineEnd:Qt,polygonStart:function(){Wa.lineStart=ne},polygonEnd:function(){Wa.point=Gt,Wa.lineStart=Kt,Wa.lineEnd=Qt}};ao.geo.path=function(){function n(n){return n&&("function"==typeof a&&u.pointRadius(+a.apply(this,arguments)),o&&o.valid||(o=i(u)),ao.geo.stream(n,o)),u.result()}function t(){return o=null,n}var e,r,i,u,o,a=4.5;return n.area=function(n){return Oa=0,ao.geo.stream(n,i($a)),Oa},n.centroid=function(n){return Ca=za=La=qa=Ta=Ra=Da=Pa=Ua=0,ao.geo.stream(n,i(Wa)),Ua?[Da/Ua,Pa/Ua]:Ra?[qa/Ra,Ta/Ra]:La?[Ca/La,za/La]:[NaN,NaN]},n.bounds=function(n){return Va=Xa=-(Ya=Za=1/0),ao.geo.stream(n,i(Ba)),[[Ya,Za],[Va,Xa]]},n.projection=function(n){return arguments.length?(i=(e=n)?n.stream||re(n):m,t()):e},n.context=function(n){return arguments.length?(u=null==(r=n)?new Wt:new te(n),"function"!=typeof a&&u.pointRadius(a),t()):r},n.pointRadius=function(t){return arguments.length?(a="function"==typeof t?t:(u.pointRadius(+t),+t),n):a},n.projection(ao.geo.albersUsa()).context(null)},ao.geo.transform=function(n){return{stream:function(t){var e=new ie(t);for(var r in n)e[r]=n[r];return e}}},ie.prototype={point:function(n,t){this.stream.point(n,t)},sphere:function(){this.stream.sphere()},lineStart:function(){this.stream.lineStart()},lineEnd:function(){this.stream.lineEnd()},polygonStart:function(){this.stream.polygonStart()},polygonEnd:function(){this.stream.polygonEnd()}},ao.geo.projection=oe,ao.geo.projectionMutator=ae,(ao.geo.equirectangular=function(){return oe(ce)}).raw=ce.invert=ce,ao.geo.rotation=function(n){function t(t){return t=n(t[0]*Yo,t[1]*Yo),t[0]*=Zo,t[1]*=Zo,t}return n=se(n[0]%360*Yo,n[1]*Yo,n.length>2?n[2]*Yo:0),t.invert=function(t){return t=n.invert(t[0]*Yo,t[1]*Yo),t[0]*=Zo,t[1]*=Zo,t},t},fe.invert=ce,ao.geo.circle=function(){function n(){var n="function"==typeof r?r.apply(this,arguments):r,t=se(-n[0]*Yo,-n[1]*Yo,0).invert,i=[];return e(null,null,1,{point:function(n,e){i.push(n=t(n,e)),n[0]*=Zo,n[1]*=Zo}}),{type:"Polygon",coordinates:[i]}}var t,e,r=[0,0],i=6;return n.origin=function(t){return arguments.length?(r=t,n):r},n.angle=function(r){return arguments.length?(e=ve((t=+r)*Yo,i*Yo),n):t},n.precision=function(r){return arguments.length?(e=ve(t*Yo,(i=+r)*Yo),n):i},n.angle(90)},ao.geo.distance=function(n,t){var e,r=(t[0]-n[0])*Yo,i=n[1]*Yo,u=t[1]*Yo,o=Math.sin(r),a=Math.cos(r),l=Math.sin(i),c=Math.cos(i),f=Math.sin(u),s=Math.cos(u);return Math.atan2(Math.sqrt((e=s*o)*e+(e=c*f-l*s*a)*e),l*f+c*s*a)},ao.geo.graticule=function(){function n(){return{type:"MultiLineString",coordinates:t()}}function t(){return ao.range(Math.ceil(u/d)*d,i,d).map(h).concat(ao.range(Math.ceil(c/y)*y,l,y).map(p)).concat(ao.range(Math.ceil(r/g)*g,e,g).filter(function(n){return xo(n%d)>Uo}).map(f)).concat(ao.range(Math.ceil(a/v)*v,o,v).filter(function(n){return xo(n%y)>Uo}).map(s))}var e,r,i,u,o,a,l,c,f,s,h,p,g=10,v=g,d=90,y=360,m=2.5;return n.lines=function(){return t().map(function(n){return{type:"LineString",coordinates:n}})},n.outline=function(){return{type:"Polygon",coordinates:[h(u).concat(p(l).slice(1),h(i).reverse().slice(1),p(c).reverse().slice(1))]}},n.extent=function(t){return arguments.length?n.majorExtent(t).minorExtent(t):n.minorExtent()},n.majorExtent=function(t){return arguments.length?(u=+t[0][0],i=+t[1][0],c=+t[0][1],l=+t[1][1],u>i&&(t=u,u=i,i=t),c>l&&(t=c,c=l,l=t),n.precision(m)):[[u,c],[i,l]]},n.minorExtent=function(t){return arguments.length?(r=+t[0][0],e=+t[1][0],a=+t[0][1],o=+t[1][1],r>e&&(t=r,r=e,e=t),a>o&&(t=a,a=o,o=t),n.precision(m)):[[r,a],[e,o]]},n.step=function(t){return arguments.length?n.majorStep(t).minorStep(t):n.minorStep()},n.majorStep=function(t){return arguments.length?(d=+t[0],y=+t[1],n):[d,y]},n.minorStep=function(t){return arguments.length?(g=+t[0],v=+t[1],n):[g,v]},n.precision=function(t){return arguments.length?(m=+t,f=ye(a,o,90),s=me(r,e,m),h=ye(c,l,90),p=me(u,i,m),n):m},n.majorExtent([[-180,-90+Uo],[180,90-Uo]]).minorExtent([[-180,-80-Uo],[180,80+Uo]])},ao.geo.greatArc=function(){function n(){return{type:"LineString",coordinates:[t||r.apply(this,arguments),e||i.apply(this,arguments)]}}var t,e,r=Me,i=xe;return n.distance=function(){return ao.geo.distance(t||r.apply(this,arguments),e||i.apply(this,arguments))},n.source=function(e){return arguments.length?(r=e,t="function"==typeof e?null:e,n):r},n.target=function(t){return arguments.length?(i=t,e="function"==typeof t?null:t,n):i},n.precision=function(){return arguments.length?n:0},n},ao.geo.interpolate=function(n,t){return be(n[0]*Yo,n[1]*Yo,t[0]*Yo,t[1]*Yo)},ao.geo.length=function(n){return Ja=0,ao.geo.stream(n,Ga),Ja};var Ja,Ga={sphere:b,point:b,lineStart:_e,lineEnd:b,polygonStart:b,polygonEnd:b},Ka=we(function(n){return Math.sqrt(2/(1+n))},function(n){return 2*Math.asin(n/2)});(ao.geo.azimuthalEqualArea=function(){return oe(Ka)}).raw=Ka;var Qa=we(function(n){var t=Math.acos(n);return t&&t/Math.sin(t)},m);(ao.geo.azimuthalEquidistant=function(){return oe(Qa)}).raw=Qa,(ao.geo.conicConformal=function(){return Vt(Se)}).raw=Se,(ao.geo.conicEquidistant=function(){return Vt(ke)}).raw=ke;var nl=we(function(n){return 1/n},Math.atan);(ao.geo.gnomonic=function(){return oe(nl)}).raw=nl,Ne.invert=function(n,t){return[n,2*Math.atan(Math.exp(t))-Io]},(ao.geo.mercator=function(){return Ee(Ne)}).raw=Ne;var tl=we(function(){return 1},Math.asin);(ao.geo.orthographic=function(){return oe(tl)}).raw=tl;var el=we(function(n){return 1/(1+n)},function(n){return 2*Math.atan(n)});(ao.geo.stereographic=function(){return oe(el)}).raw=el,Ae.invert=function(n,t){return[-t,2*Math.atan(Math.exp(n))-Io]},(ao.geo.transverseMercator=function(){var n=Ee(Ae),t=n.center,e=n.rotate;return n.center=function(n){return n?t([-n[1],n[0]]):(n=t(),[n[1],-n[0]])},n.rotate=function(n){return n?e([n[0],n[1],n.length>2?n[2]+90:90]):(n=e(),[n[0],n[1],n[2]-90])},e([0,0,90])}).raw=Ae,ao.geom={},ao.geom.hull=function(n){function t(n){if(n.length<3)return[];var t,i=En(e),u=En(r),o=n.length,a=[],l=[];for(t=0;o>t;t++)a.push([+i.call(this,n[t],t),+u.call(this,n[t],t),t]);for(a.sort(qe),t=0;o>t;t++)l.push([a[t][0],-a[t][1]]);var c=Le(a),f=Le(l),s=f[0]===c[0],h=f[f.length-1]===c[c.length-1],p=[];for(t=c.length-1;t>=0;--t)p.push(n[a[c[t]][2]]);for(t=+s;t=r&&c.x<=u&&c.y>=i&&c.y<=o?[[r,o],[u,o],[u,i],[r,i]]:[];f.point=n[a]}),t}function e(n){return n.map(function(n,t){return{x:Math.round(u(n,t)/Uo)*Uo,y:Math.round(o(n,t)/Uo)*Uo,i:t}})}var r=Ce,i=ze,u=r,o=i,a=sl;return n?t(n):(t.links=function(n){return ar(e(n)).edges.filter(function(n){return n.l&&n.r}).map(function(t){return{source:n[t.l.i],target:n[t.r.i]}})},t.triangles=function(n){var t=[];return ar(e(n)).cells.forEach(function(e,r){for(var i,u,o=e.site,a=e.edges.sort(Ve),l=-1,c=a.length,f=a[c-1].edge,s=f.l===o?f.r:f.l;++l=c,h=r>=f,p=h<<1|s;n.leaf=!1,n=n.nodes[p]||(n.nodes[p]=hr()),s?i=c:a=c,h?o=f:l=f,u(n,t,e,r,i,o,a,l)}var f,s,h,p,g,v,d,y,m,M=En(a),x=En(l);if(null!=t)v=t,d=e,y=r,m=i;else if(y=m=-(v=d=1/0),s=[],h=[],g=n.length,o)for(p=0;g>p;++p)f=n[p],f.xy&&(y=f.x),f.y>m&&(m=f.y),s.push(f.x),h.push(f.y);else for(p=0;g>p;++p){var b=+M(f=n[p],p),_=+x(f,p);v>b&&(v=b),d>_&&(d=_),b>y&&(y=b),_>m&&(m=_),s.push(b),h.push(_)}var w=y-v,S=m-d;w>S?m=d+w:y=v+S;var k=hr();if(k.add=function(n){u(k,n,+M(n,++p),+x(n,p),v,d,y,m)},k.visit=function(n){pr(n,k,v,d,y,m)},k.find=function(n){return gr(k,n[0],n[1],v,d,y,m)},p=-1,null==t){for(;++p=0?n.slice(0,t):n,r=t>=0?n.slice(t+1):"in";return e=vl.get(e)||gl,r=dl.get(r)||m,br(r(e.apply(null,lo.call(arguments,1))))},ao.interpolateHcl=Rr,ao.interpolateHsl=Dr,ao.interpolateLab=Pr,ao.interpolateRound=Ur,ao.transform=function(n){var t=fo.createElementNS(ao.ns.prefix.svg,"g");return(ao.transform=function(n){if(null!=n){t.setAttribute("transform",n);var e=t.transform.baseVal.consolidate()}return new jr(e?e.matrix:yl)})(n)},jr.prototype.toString=function(){return"translate("+this.translate+")rotate("+this.rotate+")skewX("+this.skew+")scale("+this.scale+")"};var yl={a:1,b:0,c:0,d:1,e:0,f:0};ao.interpolateTransform=$r,ao.layout={},ao.layout.bundle=function(){return function(n){for(var t=[],e=-1,r=n.length;++ea*a/y){if(v>l){var c=t.charge/l;n.px-=u*c,n.py-=o*c}return!0}if(t.point&&l&&v>l){var c=t.pointCharge/l;n.px-=u*c,n.py-=o*c}}return!t.charge}}function t(n){n.px=ao.event.x,n.py=ao.event.y,l.resume()}var e,r,i,u,o,a,l={},c=ao.dispatch("start","tick","end"),f=[1,1],s=.9,h=ml,p=Ml,g=-30,v=xl,d=.1,y=.64,M=[],x=[];return l.tick=function(){if((i*=.99)<.005)return e=null,c.end({type:"end",alpha:i=0}),!0;var t,r,l,h,p,v,y,m,b,_=M.length,w=x.length;for(r=0;w>r;++r)l=x[r],h=l.source,p=l.target,m=p.x-h.x,b=p.y-h.y,(v=m*m+b*b)&&(v=i*o[r]*((v=Math.sqrt(v))-u[r])/v,m*=v,b*=v,p.x-=m*(y=h.weight+p.weight?h.weight/(h.weight+p.weight):.5),p.y-=b*y,h.x+=m*(y=1-y),h.y+=b*y);if((y=i*d)&&(m=f[0]/2,b=f[1]/2,r=-1,y))for(;++r<_;)l=M[r],l.x+=(m-l.x)*y,l.y+=(b-l.y)*y;if(g)for(ri(t=ao.geom.quadtree(M),i,a),r=-1;++r<_;)(l=M[r]).fixed||t.visit(n(l));for(r=-1;++r<_;)l=M[r],l.fixed?(l.x=l.px,l.y=l.py):(l.x-=(l.px-(l.px=l.x))*s,l.y-=(l.py-(l.py=l.y))*s);c.tick({type:"tick",alpha:i})},l.nodes=function(n){return arguments.length?(M=n,l):M},l.links=function(n){return arguments.length?(x=n,l):x},l.size=function(n){return arguments.length?(f=n,l):f},l.linkDistance=function(n){return arguments.length?(h="function"==typeof n?n:+n,l):h},l.distance=l.linkDistance,l.linkStrength=function(n){return arguments.length?(p="function"==typeof n?n:+n,l):p},l.friction=function(n){return arguments.length?(s=+n,l):s},l.charge=function(n){return arguments.length?(g="function"==typeof n?n:+n,l):g},l.chargeDistance=function(n){return arguments.length?(v=n*n,l):Math.sqrt(v)},l.gravity=function(n){return arguments.length?(d=+n,l):d},l.theta=function(n){return arguments.length?(y=n*n,l):Math.sqrt(y)},l.alpha=function(n){return arguments.length?(n=+n,i?n>0?i=n:(e.c=null,e.t=NaN,e=null,c.end({type:"end",alpha:i=0})):n>0&&(c.start({type:"start",alpha:i=n}),e=qn(l.tick)),l):i},l.start=function(){function n(n,r){if(!e){for(e=new Array(i),l=0;i>l;++l)e[l]=[];for(l=0;c>l;++l){var u=x[l];e[u.source.index].push(u.target),e[u.target.index].push(u.source)}}for(var o,a=e[t],l=-1,f=a.length;++lt;++t)(r=M[t]).index=t,r.weight=0;for(t=0;c>t;++t)r=x[t],"number"==typeof r.source&&(r.source=M[r.source]),"number"==typeof r.target&&(r.target=M[r.target]),++r.source.weight,++r.target.weight;for(t=0;i>t;++t)r=M[t],isNaN(r.x)&&(r.x=n("x",s)),isNaN(r.y)&&(r.y=n("y",v)),isNaN(r.px)&&(r.px=r.x),isNaN(r.py)&&(r.py=r.y);if(u=[],"function"==typeof h)for(t=0;c>t;++t)u[t]=+h.call(this,x[t],t);else for(t=0;c>t;++t)u[t]=h;if(o=[],"function"==typeof p)for(t=0;c>t;++t)o[t]=+p.call(this,x[t],t);else for(t=0;c>t;++t)o[t]=p;if(a=[],"function"==typeof g)for(t=0;i>t;++t)a[t]=+g.call(this,M[t],t);else for(t=0;i>t;++t)a[t]=g;return l.resume()},l.resume=function(){return l.alpha(.1)},l.stop=function(){return l.alpha(0)},l.drag=function(){return r||(r=ao.behavior.drag().origin(m).on("dragstart.force",Qr).on("drag.force",t).on("dragend.force",ni)),arguments.length?void this.on("mouseover.force",ti).on("mouseout.force",ei).call(r):r},ao.rebind(l,c,"on")};var ml=20,Ml=1,xl=1/0;ao.layout.hierarchy=function(){function n(i){var u,o=[i],a=[];for(i.depth=0;null!=(u=o.pop());)if(a.push(u),(c=e.call(n,u,u.depth))&&(l=c.length)){for(var l,c,f;--l>=0;)o.push(f=c[l]),f.parent=u,f.depth=u.depth+1;r&&(u.value=0),u.children=c}else r&&(u.value=+r.call(n,u,u.depth)||0),delete u.children;return oi(i,function(n){var e,i;t&&(e=n.children)&&e.sort(t),r&&(i=n.parent)&&(i.value+=n.value)}),a}var t=ci,e=ai,r=li;return n.sort=function(e){return arguments.length?(t=e,n):t},n.children=function(t){return arguments.length?(e=t,n):e},n.value=function(t){return arguments.length?(r=t,n):r},n.revalue=function(t){return r&&(ui(t,function(n){n.children&&(n.value=0)}),oi(t,function(t){var e;t.children||(t.value=+r.call(n,t,t.depth)||0),(e=t.parent)&&(e.value+=t.value)})),t},n},ao.layout.partition=function(){function n(t,e,r,i){var u=t.children;if(t.x=e,t.y=t.depth*i,t.dx=r,t.dy=i,u&&(o=u.length)){var o,a,l,c=-1;for(r=t.value?r/t.value:0;++cs?-1:1),g=ao.sum(c),v=g?(s-l*p)/g:0,d=ao.range(l),y=[];return null!=e&&d.sort(e===bl?function(n,t){return c[t]-c[n]}:function(n,t){return e(o[n],o[t])}),d.forEach(function(n){y[n]={data:o[n],value:a=c[n],startAngle:f,endAngle:f+=a*v+p,padAngle:h}}),y}var t=Number,e=bl,r=0,i=Ho,u=0;return n.value=function(e){return arguments.length?(t=e,n):t},n.sort=function(t){return arguments.length?(e=t,n):e},n.startAngle=function(t){return arguments.length?(r=t,n):r},n.endAngle=function(t){return arguments.length?(i=t,n):i},n.padAngle=function(t){return arguments.length?(u=t,n):u},n};var bl={};ao.layout.stack=function(){function n(a,l){if(!(h=a.length))return a;var c=a.map(function(e,r){return t.call(n,e,r)}),f=c.map(function(t){return t.map(function(t,e){return[u.call(n,t,e),o.call(n,t,e)]})}),s=e.call(n,f,l);c=ao.permute(c,s),f=ao.permute(f,s);var h,p,g,v,d=r.call(n,f,l),y=c[0].length;for(g=0;y>g;++g)for(i.call(n,c[0][g],v=d[g],f[0][g][1]),p=1;h>p;++p)i.call(n,c[p][g],v+=f[p-1][g][1],f[p][g][1]);return a}var t=m,e=gi,r=vi,i=pi,u=si,o=hi;return n.values=function(e){return arguments.length?(t=e,n):t},n.order=function(t){return arguments.length?(e="function"==typeof t?t:_l.get(t)||gi,n):e},n.offset=function(t){return arguments.length?(r="function"==typeof t?t:wl.get(t)||vi,n):r},n.x=function(t){return arguments.length?(u=t,n):u},n.y=function(t){return arguments.length?(o=t,n):o},n.out=function(t){return arguments.length?(i=t,n):i},n};var _l=ao.map({"inside-out":function(n){var t,e,r=n.length,i=n.map(di),u=n.map(yi),o=ao.range(r).sort(function(n,t){return i[n]-i[t]}),a=0,l=0,c=[],f=[];for(t=0;r>t;++t)e=o[t],l>a?(a+=u[e],c.push(e)):(l+=u[e],f.push(e));return f.reverse().concat(c)},reverse:function(n){return ao.range(n.length).reverse()},"default":gi}),wl=ao.map({silhouette:function(n){var t,e,r,i=n.length,u=n[0].length,o=[],a=0,l=[];for(e=0;u>e;++e){for(t=0,r=0;i>t;t++)r+=n[t][e][1];r>a&&(a=r),o.push(r)}for(e=0;u>e;++e)l[e]=(a-o[e])/2;return l},wiggle:function(n){var t,e,r,i,u,o,a,l,c,f=n.length,s=n[0],h=s.length,p=[];for(p[0]=l=c=0,e=1;h>e;++e){for(t=0,i=0;f>t;++t)i+=n[t][e][1];for(t=0,u=0,a=s[e][0]-s[e-1][0];f>t;++t){for(r=0,o=(n[t][e][1]-n[t][e-1][1])/(2*a);t>r;++r)o+=(n[r][e][1]-n[r][e-1][1])/a;u+=o*n[t][e][1]}p[e]=l-=i?u/i*a:0,c>l&&(c=l)}for(e=0;h>e;++e)p[e]-=c;return p},expand:function(n){var t,e,r,i=n.length,u=n[0].length,o=1/i,a=[];for(e=0;u>e;++e){for(t=0,r=0;i>t;t++)r+=n[t][e][1];if(r)for(t=0;i>t;t++)n[t][e][1]/=r;else for(t=0;i>t;t++)n[t][e][1]=o}for(e=0;u>e;++e)a[e]=0;return a},zero:vi});ao.layout.histogram=function(){function n(n,u){for(var o,a,l=[],c=n.map(e,this),f=r.call(this,c,u),s=i.call(this,f,c,u),u=-1,h=c.length,p=s.length-1,g=t?1:1/h;++u0)for(u=-1;++u=f[0]&&a<=f[1]&&(o=l[ao.bisect(s,a,1,p)-1],o.y+=g,o.push(n[u]));return l}var t=!0,e=Number,r=bi,i=Mi;return n.value=function(t){return arguments.length?(e=t,n):e},n.range=function(t){return arguments.length?(r=En(t),n):r},n.bins=function(t){return arguments.length?(i="number"==typeof t?function(n){return xi(n,t)}:En(t),n):i},n.frequency=function(e){return arguments.length?(t=!!e,n):t},n},ao.layout.pack=function(){function n(n,u){var o=e.call(this,n,u),a=o[0],l=i[0],c=i[1],f=null==t?Math.sqrt:"function"==typeof t?t:function(){return t};if(a.x=a.y=0,oi(a,function(n){n.r=+f(n.value)}),oi(a,Ni),r){var s=r*(t?1:Math.max(2*a.r/l,2*a.r/c))/2;oi(a,function(n){n.r+=s}),oi(a,Ni),oi(a,function(n){n.r-=s})}return Ci(a,l/2,c/2,t?1:1/Math.max(2*a.r/l,2*a.r/c)),o}var t,e=ao.layout.hierarchy().sort(_i),r=0,i=[1,1];return n.size=function(t){return arguments.length?(i=t,n):i},n.radius=function(e){return arguments.length?(t=null==e||"function"==typeof e?e:+e,n):t},n.padding=function(t){return arguments.length?(r=+t,n):r},ii(n,e)},ao.layout.tree=function(){function n(n,i){var f=o.call(this,n,i),s=f[0],h=t(s);if(oi(h,e),h.parent.m=-h.z,ui(h,r),c)ui(s,u);else{var p=s,g=s,v=s;ui(s,function(n){n.xg.x&&(g=n),n.depth>v.depth&&(v=n)});var d=a(p,g)/2-p.x,y=l[0]/(g.x+a(g,p)/2+d),m=l[1]/(v.depth||1);ui(s,function(n){n.x=(n.x+d)*y,n.y=n.depth*m})}return f}function t(n){for(var t,e={A:null,children:[n]},r=[e];null!=(t=r.pop());)for(var i,u=t.children,o=0,a=u.length;a>o;++o)r.push((u[o]=i={_:u[o],parent:t,children:(i=u[o].children)&&i.slice()||[],A:null,a:null,z:0,m:0,c:0,s:0,t:null,i:o}).a=i);return e.children[0]}function e(n){var t=n.children,e=n.parent.children,r=n.i?e[n.i-1]:null;if(t.length){Di(n);var u=(t[0].z+t[t.length-1].z)/2;r?(n.z=r.z+a(n._,r._),n.m=n.z-u):n.z=u}else r&&(n.z=r.z+a(n._,r._));n.parent.A=i(n,r,n.parent.A||e[0])}function r(n){n._.x=n.z+n.parent.m,n.m+=n.parent.m}function i(n,t,e){if(t){for(var r,i=n,u=n,o=t,l=i.parent.children[0],c=i.m,f=u.m,s=o.m,h=l.m;o=Ti(o),i=qi(i),o&&i;)l=qi(l),u=Ti(u),u.a=n,r=o.z+s-i.z-c+a(o._,i._),r>0&&(Ri(Pi(o,n,e),n,r),c+=r,f+=r),s+=o.m,c+=i.m,h+=l.m,f+=u.m;o&&!Ti(u)&&(u.t=o,u.m+=s-f),i&&!qi(l)&&(l.t=i,l.m+=c-h,e=n)}return e}function u(n){n.x*=l[0],n.y=n.depth*l[1]}var o=ao.layout.hierarchy().sort(null).value(null),a=Li,l=[1,1],c=null;return n.separation=function(t){return arguments.length?(a=t,n):a},n.size=function(t){return arguments.length?(c=null==(l=t)?u:null,n):c?null:l},n.nodeSize=function(t){return arguments.length?(c=null==(l=t)?null:u,n):c?l:null},ii(n,o)},ao.layout.cluster=function(){function n(n,u){var o,a=t.call(this,n,u),l=a[0],c=0;oi(l,function(n){var t=n.children;t&&t.length?(n.x=ji(t),n.y=Ui(t)):(n.x=o?c+=e(n,o):0,n.y=0,o=n)});var f=Fi(l),s=Hi(l),h=f.x-e(f,s)/2,p=s.x+e(s,f)/2;return oi(l,i?function(n){n.x=(n.x-l.x)*r[0],n.y=(l.y-n.y)*r[1]}:function(n){n.x=(n.x-h)/(p-h)*r[0],n.y=(1-(l.y?n.y/l.y:1))*r[1]}),a}var t=ao.layout.hierarchy().sort(null).value(null),e=Li,r=[1,1],i=!1;return n.separation=function(t){return arguments.length?(e=t,n):e},n.size=function(t){return arguments.length?(i=null==(r=t),n):i?null:r},n.nodeSize=function(t){return arguments.length?(i=null!=(r=t),n):i?r:null},ii(n,t)},ao.layout.treemap=function(){function n(n,t){for(var e,r,i=-1,u=n.length;++it?0:t),e.area=isNaN(r)||0>=r?0:r}function t(e){var u=e.children;if(u&&u.length){var o,a,l,c=s(e),f=[],h=u.slice(),g=1/0,v="slice"===p?c.dx:"dice"===p?c.dy:"slice-dice"===p?1&e.depth?c.dy:c.dx:Math.min(c.dx,c.dy);for(n(h,c.dx*c.dy/e.value),f.area=0;(l=h.length)>0;)f.push(o=h[l-1]),f.area+=o.area,"squarify"!==p||(a=r(f,v))<=g?(h.pop(),g=a):(f.area-=f.pop().area,i(f,v,c,!1),v=Math.min(c.dx,c.dy),f.length=f.area=0,g=1/0);f.length&&(i(f,v,c,!0),f.length=f.area=0),u.forEach(t)}}function e(t){var r=t.children;if(r&&r.length){var u,o=s(t),a=r.slice(),l=[];for(n(a,o.dx*o.dy/t.value),l.area=0;u=a.pop();)l.push(u),l.area+=u.area,null!=u.z&&(i(l,u.z?o.dx:o.dy,o,!a.length),l.length=l.area=0);r.forEach(e)}}function r(n,t){for(var e,r=n.area,i=0,u=1/0,o=-1,a=n.length;++oe&&(u=e),e>i&&(i=e));return r*=r,t*=t,r?Math.max(t*i*g/r,r/(t*u*g)):1/0}function i(n,t,e,r){var i,u=-1,o=n.length,a=e.x,c=e.y,f=t?l(n.area/t):0; +if(t==e.dx){for((r||f>e.dy)&&(f=e.dy);++ue.dx)&&(f=e.dx);++ue&&(t=1),1>e&&(n=0),function(){var e,r,i;do e=2*Math.random()-1,r=2*Math.random()-1,i=e*e+r*r;while(!i||i>1);return n+t*e*Math.sqrt(-2*Math.log(i)/i)}},logNormal:function(){var n=ao.random.normal.apply(ao,arguments);return function(){return Math.exp(n())}},bates:function(n){var t=ao.random.irwinHall(n);return function(){return t()/n}},irwinHall:function(n){return function(){for(var t=0,e=0;n>e;e++)t+=Math.random();return t}}},ao.scale={};var Sl={floor:m,ceil:m};ao.scale.linear=function(){return Wi([0,1],[0,1],Mr,!1)};var kl={s:1,g:1,p:1,r:1,e:1};ao.scale.log=function(){return ru(ao.scale.linear().domain([0,1]),10,!0,[1,10])};var Nl=ao.format(".0e"),El={floor:function(n){return-Math.ceil(-n)},ceil:function(n){return-Math.floor(-n)}};ao.scale.pow=function(){return iu(ao.scale.linear(),1,[0,1])},ao.scale.sqrt=function(){return ao.scale.pow().exponent(.5)},ao.scale.ordinal=function(){return ou([],{t:"range",a:[[]]})},ao.scale.category10=function(){return ao.scale.ordinal().range(Al)},ao.scale.category20=function(){return ao.scale.ordinal().range(Cl)},ao.scale.category20b=function(){return ao.scale.ordinal().range(zl)},ao.scale.category20c=function(){return ao.scale.ordinal().range(Ll)};var Al=[2062260,16744206,2924588,14034728,9725885,9197131,14907330,8355711,12369186,1556175].map(xn),Cl=[2062260,11454440,16744206,16759672,2924588,10018698,14034728,16750742,9725885,12955861,9197131,12885140,14907330,16234194,8355711,13092807,12369186,14408589,1556175,10410725].map(xn),zl=[3750777,5395619,7040719,10264286,6519097,9216594,11915115,13556636,9202993,12426809,15186514,15190932,8666169,11356490,14049643,15177372,8077683,10834324,13528509,14589654].map(xn),Ll=[3244733,7057110,10406625,13032431,15095053,16616764,16625259,16634018,3253076,7652470,10607003,13101504,7695281,10394312,12369372,14342891,6513507,9868950,12434877,14277081].map(xn);ao.scale.quantile=function(){return au([],[])},ao.scale.quantize=function(){return lu(0,1,[0,1])},ao.scale.threshold=function(){return cu([.5],[0,1])},ao.scale.identity=function(){return fu([0,1])},ao.svg={},ao.svg.arc=function(){function n(){var n=Math.max(0,+e.apply(this,arguments)),c=Math.max(0,+r.apply(this,arguments)),f=o.apply(this,arguments)-Io,s=a.apply(this,arguments)-Io,h=Math.abs(s-f),p=f>s?0:1;if(n>c&&(g=c,c=n,n=g),h>=Oo)return t(c,p)+(n?t(n,1-p):"")+"Z";var g,v,d,y,m,M,x,b,_,w,S,k,N=0,E=0,A=[];if((y=(+l.apply(this,arguments)||0)/2)&&(d=u===ql?Math.sqrt(n*n+c*c):+u.apply(this,arguments),p||(E*=-1),c&&(E=tn(d/c*Math.sin(y))),n&&(N=tn(d/n*Math.sin(y)))),c){m=c*Math.cos(f+E),M=c*Math.sin(f+E),x=c*Math.cos(s-E),b=c*Math.sin(s-E);var C=Math.abs(s-f-2*E)<=Fo?0:1;if(E&&yu(m,M,x,b)===p^C){var z=(f+s)/2;m=c*Math.cos(z),M=c*Math.sin(z),x=b=null}}else m=M=0;if(n){_=n*Math.cos(s-N),w=n*Math.sin(s-N),S=n*Math.cos(f+N),k=n*Math.sin(f+N);var L=Math.abs(f-s+2*N)<=Fo?0:1;if(N&&yu(_,w,S,k)===1-p^L){var q=(f+s)/2;_=n*Math.cos(q),w=n*Math.sin(q),S=k=null}}else _=w=0;if(h>Uo&&(g=Math.min(Math.abs(c-n)/2,+i.apply(this,arguments)))>.001){v=c>n^p?0:1;var T=g,R=g;if(Fo>h){var D=null==S?[_,w]:null==x?[m,M]:Re([m,M],[S,k],[x,b],[_,w]),P=m-D[0],U=M-D[1],j=x-D[0],F=b-D[1],H=1/Math.sin(Math.acos((P*j+U*F)/(Math.sqrt(P*P+U*U)*Math.sqrt(j*j+F*F)))/2),O=Math.sqrt(D[0]*D[0]+D[1]*D[1]);R=Math.min(g,(n-O)/(H-1)),T=Math.min(g,(c-O)/(H+1))}if(null!=x){var I=mu(null==S?[_,w]:[S,k],[m,M],c,T,p),Y=mu([x,b],[_,w],c,T,p);g===T?A.push("M",I[0],"A",T,",",T," 0 0,",v," ",I[1],"A",c,",",c," 0 ",1-p^yu(I[1][0],I[1][1],Y[1][0],Y[1][1]),",",p," ",Y[1],"A",T,",",T," 0 0,",v," ",Y[0]):A.push("M",I[0],"A",T,",",T," 0 1,",v," ",Y[0])}else A.push("M",m,",",M);if(null!=S){var Z=mu([m,M],[S,k],n,-R,p),V=mu([_,w],null==x?[m,M]:[x,b],n,-R,p);g===R?A.push("L",V[0],"A",R,",",R," 0 0,",v," ",V[1],"A",n,",",n," 0 ",p^yu(V[1][0],V[1][1],Z[1][0],Z[1][1]),",",1-p," ",Z[1],"A",R,",",R," 0 0,",v," ",Z[0]):A.push("L",V[0],"A",R,",",R," 0 0,",v," ",Z[0])}else A.push("L",_,",",w)}else A.push("M",m,",",M),null!=x&&A.push("A",c,",",c," 0 ",C,",",p," ",x,",",b),A.push("L",_,",",w),null!=S&&A.push("A",n,",",n," 0 ",L,",",1-p," ",S,",",k);return A.push("Z"),A.join("")}function t(n,t){return"M0,"+n+"A"+n+","+n+" 0 1,"+t+" 0,"+-n+"A"+n+","+n+" 0 1,"+t+" 0,"+n}var e=hu,r=pu,i=su,u=ql,o=gu,a=vu,l=du;return n.innerRadius=function(t){return arguments.length?(e=En(t),n):e},n.outerRadius=function(t){return arguments.length?(r=En(t),n):r},n.cornerRadius=function(t){return arguments.length?(i=En(t),n):i},n.padRadius=function(t){return arguments.length?(u=t==ql?ql:En(t),n):u},n.startAngle=function(t){return arguments.length?(o=En(t),n):o},n.endAngle=function(t){return arguments.length?(a=En(t),n):a},n.padAngle=function(t){return arguments.length?(l=En(t),n):l},n.centroid=function(){var n=(+e.apply(this,arguments)+ +r.apply(this,arguments))/2,t=(+o.apply(this,arguments)+ +a.apply(this,arguments))/2-Io;return[Math.cos(t)*n,Math.sin(t)*n]},n};var ql="auto";ao.svg.line=function(){return Mu(m)};var Tl=ao.map({linear:xu,"linear-closed":bu,step:_u,"step-before":wu,"step-after":Su,basis:zu,"basis-open":Lu,"basis-closed":qu,bundle:Tu,cardinal:Eu,"cardinal-open":ku,"cardinal-closed":Nu,monotone:Fu});Tl.forEach(function(n,t){t.key=n,t.closed=/-closed$/.test(n)});var Rl=[0,2/3,1/3,0],Dl=[0,1/3,2/3,0],Pl=[0,1/6,2/3,1/6];ao.svg.line.radial=function(){var n=Mu(Hu);return n.radius=n.x,delete n.x,n.angle=n.y,delete n.y,n},wu.reverse=Su,Su.reverse=wu,ao.svg.area=function(){return Ou(m)},ao.svg.area.radial=function(){var n=Ou(Hu);return n.radius=n.x,delete n.x,n.innerRadius=n.x0,delete n.x0,n.outerRadius=n.x1,delete n.x1,n.angle=n.y,delete n.y,n.startAngle=n.y0,delete n.y0,n.endAngle=n.y1,delete n.y1,n},ao.svg.chord=function(){function n(n,a){var l=t(this,u,n,a),c=t(this,o,n,a);return"M"+l.p0+r(l.r,l.p1,l.a1-l.a0)+(e(l,c)?i(l.r,l.p1,l.r,l.p0):i(l.r,l.p1,c.r,c.p0)+r(c.r,c.p1,c.a1-c.a0)+i(c.r,c.p1,l.r,l.p0))+"Z"}function t(n,t,e,r){var i=t.call(n,e,r),u=a.call(n,i,r),o=l.call(n,i,r)-Io,f=c.call(n,i,r)-Io;return{r:u,a0:o,a1:f,p0:[u*Math.cos(o),u*Math.sin(o)],p1:[u*Math.cos(f),u*Math.sin(f)]}}function e(n,t){return n.a0==t.a0&&n.a1==t.a1}function r(n,t,e){return"A"+n+","+n+" 0 "+ +(e>Fo)+",1 "+t}function i(n,t,e,r){return"Q 0,0 "+r}var u=Me,o=xe,a=Iu,l=gu,c=vu;return n.radius=function(t){return arguments.length?(a=En(t),n):a},n.source=function(t){return arguments.length?(u=En(t),n):u},n.target=function(t){return arguments.length?(o=En(t),n):o},n.startAngle=function(t){return arguments.length?(l=En(t),n):l},n.endAngle=function(t){return arguments.length?(c=En(t),n):c},n},ao.svg.diagonal=function(){function n(n,i){var u=t.call(this,n,i),o=e.call(this,n,i),a=(u.y+o.y)/2,l=[u,{x:u.x,y:a},{x:o.x,y:a},o];return l=l.map(r),"M"+l[0]+"C"+l[1]+" "+l[2]+" "+l[3]}var t=Me,e=xe,r=Yu;return n.source=function(e){return arguments.length?(t=En(e),n):t},n.target=function(t){return arguments.length?(e=En(t),n):e},n.projection=function(t){return arguments.length?(r=t,n):r},n},ao.svg.diagonal.radial=function(){var n=ao.svg.diagonal(),t=Yu,e=n.projection;return n.projection=function(n){return arguments.length?e(Zu(t=n)):t},n},ao.svg.symbol=function(){function n(n,r){return(Ul.get(t.call(this,n,r))||$u)(e.call(this,n,r))}var t=Xu,e=Vu;return n.type=function(e){return arguments.length?(t=En(e),n):t},n.size=function(t){return arguments.length?(e=En(t),n):e},n};var Ul=ao.map({circle:$u,cross:function(n){var t=Math.sqrt(n/5)/2;return"M"+-3*t+","+-t+"H"+-t+"V"+-3*t+"H"+t+"V"+-t+"H"+3*t+"V"+t+"H"+t+"V"+3*t+"H"+-t+"V"+t+"H"+-3*t+"Z"},diamond:function(n){var t=Math.sqrt(n/(2*Fl)),e=t*Fl;return"M0,"+-t+"L"+e+",0 0,"+t+" "+-e+",0Z"},square:function(n){var t=Math.sqrt(n)/2;return"M"+-t+","+-t+"L"+t+","+-t+" "+t+","+t+" "+-t+","+t+"Z"},"triangle-down":function(n){var t=Math.sqrt(n/jl),e=t*jl/2;return"M0,"+e+"L"+t+","+-e+" "+-t+","+-e+"Z"},"triangle-up":function(n){var t=Math.sqrt(n/jl),e=t*jl/2;return"M0,"+-e+"L"+t+","+e+" "+-t+","+e+"Z"}});ao.svg.symbolTypes=Ul.keys();var jl=Math.sqrt(3),Fl=Math.tan(30*Yo);Co.transition=function(n){for(var t,e,r=Hl||++Zl,i=Ku(n),u=[],o=Ol||{time:Date.now(),ease:Nr,delay:0,duration:250},a=-1,l=this.length;++au;u++){i.push(t=[]);for(var e=this[u],a=0,l=e.length;l>a;a++)(r=e[a])&&n.call(r,r.__data__,a,u)&&t.push(r)}return Wu(i,this.namespace,this.id)},Yl.tween=function(n,t){var e=this.id,r=this.namespace;return arguments.length<2?this.node()[r][e].tween.get(n):Y(this,null==t?function(t){t[r][e].tween.remove(n)}:function(i){i[r][e].tween.set(n,t)})},Yl.attr=function(n,t){function e(){this.removeAttribute(a)}function r(){this.removeAttributeNS(a.space,a.local)}function i(n){return null==n?e:(n+="",function(){var t,e=this.getAttribute(a);return e!==n&&(t=o(e,n),function(n){this.setAttribute(a,t(n))})})}function u(n){return null==n?r:(n+="",function(){var t,e=this.getAttributeNS(a.space,a.local);return e!==n&&(t=o(e,n),function(n){this.setAttributeNS(a.space,a.local,t(n))})})}if(arguments.length<2){for(t in n)this.attr(t,n[t]);return this}var o="transform"==n?$r:Mr,a=ao.ns.qualify(n);return Ju(this,"attr."+n,t,a.local?u:i)},Yl.attrTween=function(n,t){function e(n,e){var r=t.call(this,n,e,this.getAttribute(i));return r&&function(n){this.setAttribute(i,r(n))}}function r(n,e){var r=t.call(this,n,e,this.getAttributeNS(i.space,i.local));return r&&function(n){this.setAttributeNS(i.space,i.local,r(n))}}var i=ao.ns.qualify(n);return this.tween("attr."+n,i.local?r:e)},Yl.style=function(n,e,r){function i(){this.style.removeProperty(n)}function u(e){return null==e?i:(e+="",function(){var i,u=t(this).getComputedStyle(this,null).getPropertyValue(n);return u!==e&&(i=Mr(u,e),function(t){this.style.setProperty(n,i(t),r)})})}var o=arguments.length;if(3>o){if("string"!=typeof n){2>o&&(e="");for(r in n)this.style(r,n[r],e);return this}r=""}return Ju(this,"style."+n,e,u)},Yl.styleTween=function(n,e,r){function i(i,u){var o=e.call(this,i,u,t(this).getComputedStyle(this,null).getPropertyValue(n));return o&&function(t){this.style.setProperty(n,o(t),r)}}return arguments.length<3&&(r=""),this.tween("style."+n,i)},Yl.text=function(n){return Ju(this,"text",n,Gu)},Yl.remove=function(){var n=this.namespace;return this.each("end.transition",function(){var t;this[n].count<2&&(t=this.parentNode)&&t.removeChild(this)})},Yl.ease=function(n){var t=this.id,e=this.namespace;return arguments.length<1?this.node()[e][t].ease:("function"!=typeof n&&(n=ao.ease.apply(ao,arguments)),Y(this,function(r){r[e][t].ease=n}))},Yl.delay=function(n){var t=this.id,e=this.namespace;return arguments.length<1?this.node()[e][t].delay:Y(this,"function"==typeof n?function(r,i,u){r[e][t].delay=+n.call(r,r.__data__,i,u)}:(n=+n,function(r){r[e][t].delay=n}))},Yl.duration=function(n){var t=this.id,e=this.namespace;return arguments.length<1?this.node()[e][t].duration:Y(this,"function"==typeof n?function(r,i,u){r[e][t].duration=Math.max(1,n.call(r,r.__data__,i,u))}:(n=Math.max(1,n),function(r){r[e][t].duration=n}))},Yl.each=function(n,t){var e=this.id,r=this.namespace;if(arguments.length<2){var i=Ol,u=Hl;try{Hl=e,Y(this,function(t,i,u){Ol=t[r][e],n.call(t,t.__data__,i,u)})}finally{Ol=i,Hl=u}}else Y(this,function(i){var u=i[r][e];(u.event||(u.event=ao.dispatch("start","end","interrupt"))).on(n,t)});return this},Yl.transition=function(){for(var n,t,e,r,i=this.id,u=++Zl,o=this.namespace,a=[],l=0,c=this.length;c>l;l++){a.push(n=[]);for(var t=this[l],f=0,s=t.length;s>f;f++)(e=t[f])&&(r=e[o][i],Qu(e,f,o,u,{time:r.time,ease:r.ease,delay:r.delay+r.duration,duration:r.duration})),n.push(e)}return Wu(a,o,u)},ao.svg.axis=function(){function n(n){n.each(function(){var n,c=ao.select(this),f=this.__chart__||e,s=this.__chart__=e.copy(),h=null==l?s.ticks?s.ticks.apply(s,a):s.domain():l,p=null==t?s.tickFormat?s.tickFormat.apply(s,a):m:t,g=c.selectAll(".tick").data(h,s),v=g.enter().insert("g",".domain").attr("class","tick").style("opacity",Uo),d=ao.transition(g.exit()).style("opacity",Uo).remove(),y=ao.transition(g.order()).style("opacity",1),M=Math.max(i,0)+o,x=Zi(s),b=c.selectAll(".domain").data([0]),_=(b.enter().append("path").attr("class","domain"),ao.transition(b));v.append("line"),v.append("text");var w,S,k,N,E=v.select("line"),A=y.select("line"),C=g.select("text").text(p),z=v.select("text"),L=y.select("text"),q="top"===r||"left"===r?-1:1;if("bottom"===r||"top"===r?(n=no,w="x",k="y",S="x2",N="y2",C.attr("dy",0>q?"0em":".71em").style("text-anchor","middle"),_.attr("d","M"+x[0]+","+q*u+"V0H"+x[1]+"V"+q*u)):(n=to,w="y",k="x",S="y2",N="x2",C.attr("dy",".32em").style("text-anchor",0>q?"end":"start"),_.attr("d","M"+q*u+","+x[0]+"H0V"+x[1]+"H"+q*u)),E.attr(N,q*i),z.attr(k,q*M),A.attr(S,0).attr(N,q*i),L.attr(w,0).attr(k,q*M),s.rangeBand){var T=s,R=T.rangeBand()/2;f=s=function(n){return T(n)+R}}else f.rangeBand?f=s:d.call(n,s,f);v.call(n,f,s),y.call(n,s,s)})}var t,e=ao.scale.linear(),r=Vl,i=6,u=6,o=3,a=[10],l=null;return n.scale=function(t){return arguments.length?(e=t,n):e},n.orient=function(t){return arguments.length?(r=t in Xl?t+"":Vl,n):r},n.ticks=function(){return arguments.length?(a=co(arguments),n):a},n.tickValues=function(t){return arguments.length?(l=t,n):l},n.tickFormat=function(e){return arguments.length?(t=e,n):t},n.tickSize=function(t){var e=arguments.length;return e?(i=+t,u=+arguments[e-1],n):i},n.innerTickSize=function(t){return arguments.length?(i=+t,n):i},n.outerTickSize=function(t){return arguments.length?(u=+t,n):u},n.tickPadding=function(t){return arguments.length?(o=+t,n):o},n.tickSubdivide=function(){return arguments.length&&n},n};var Vl="bottom",Xl={top:1,right:1,bottom:1,left:1};ao.svg.brush=function(){function n(t){t.each(function(){var t=ao.select(this).style("pointer-events","all").style("-webkit-tap-highlight-color","rgba(0,0,0,0)").on("mousedown.brush",u).on("touchstart.brush",u),o=t.selectAll(".background").data([0]);o.enter().append("rect").attr("class","background").style("visibility","hidden").style("cursor","crosshair"),t.selectAll(".extent").data([0]).enter().append("rect").attr("class","extent").style("cursor","move");var a=t.selectAll(".resize").data(v,m);a.exit().remove(),a.enter().append("g").attr("class",function(n){return"resize "+n}).style("cursor",function(n){return $l[n]}).append("rect").attr("x",function(n){return/[ew]$/.test(n)?-3:null}).attr("y",function(n){return/^[ns]/.test(n)?-3:null}).attr("width",6).attr("height",6).style("visibility","hidden"),a.style("display",n.empty()?"none":null);var l,s=ao.transition(t),h=ao.transition(o);c&&(l=Zi(c),h.attr("x",l[0]).attr("width",l[1]-l[0]),r(s)),f&&(l=Zi(f),h.attr("y",l[0]).attr("height",l[1]-l[0]),i(s)),e(s)})}function e(n){n.selectAll(".resize").attr("transform",function(n){return"translate("+s[+/e$/.test(n)]+","+h[+/^s/.test(n)]+")"})}function r(n){n.select(".extent").attr("x",s[0]),n.selectAll(".extent,.n>rect,.s>rect").attr("width",s[1]-s[0])}function i(n){n.select(".extent").attr("y",h[0]),n.selectAll(".extent,.e>rect,.w>rect").attr("height",h[1]-h[0])}function u(){function u(){32==ao.event.keyCode&&(C||(M=null,L[0]-=s[1],L[1]-=h[1],C=2),S())}function v(){32==ao.event.keyCode&&2==C&&(L[0]+=s[1],L[1]+=h[1],C=0,S())}function d(){var n=ao.mouse(b),t=!1;x&&(n[0]+=x[0],n[1]+=x[1]),C||(ao.event.altKey?(M||(M=[(s[0]+s[1])/2,(h[0]+h[1])/2]),L[0]=s[+(n[0]f?(i=r,r=f):i=f),v[0]!=r||v[1]!=i?(e?a=null:o=null,v[0]=r,v[1]=i,!0):void 0}function m(){d(),k.style("pointer-events","all").selectAll(".resize").style("display",n.empty()?"none":null),ao.select("body").style("cursor",null),q.on("mousemove.brush",null).on("mouseup.brush",null).on("touchmove.brush",null).on("touchend.brush",null).on("keydown.brush",null).on("keyup.brush",null),z(),w({type:"brushend"})}var M,x,b=this,_=ao.select(ao.event.target),w=l.of(b,arguments),k=ao.select(b),N=_.datum(),E=!/^(n|s)$/.test(N)&&c,A=!/^(e|w)$/.test(N)&&f,C=_.classed("extent"),z=W(b),L=ao.mouse(b),q=ao.select(t(b)).on("keydown.brush",u).on("keyup.brush",v);if(ao.event.changedTouches?q.on("touchmove.brush",d).on("touchend.brush",m):q.on("mousemove.brush",d).on("mouseup.brush",m),k.interrupt().selectAll("*").interrupt(),C)L[0]=s[0]-L[0],L[1]=h[0]-L[1];else if(N){var T=+/w$/.test(N),R=+/^n/.test(N);x=[s[1-T]-L[0],h[1-R]-L[1]],L[0]=s[T],L[1]=h[R]}else ao.event.altKey&&(M=L.slice());k.style("pointer-events","none").selectAll(".resize").style("display",null),ao.select("body").style("cursor",_.style("cursor")),w({type:"brushstart"}),d()}var o,a,l=N(n,"brushstart","brush","brushend"),c=null,f=null,s=[0,0],h=[0,0],p=!0,g=!0,v=Bl[0];return n.event=function(n){n.each(function(){var n=l.of(this,arguments),t={x:s,y:h,i:o,j:a},e=this.__chart__||t;this.__chart__=t,Hl?ao.select(this).transition().each("start.brush",function(){o=e.i,a=e.j,s=e.x,h=e.y,n({type:"brushstart"})}).tween("brush:brush",function(){var e=xr(s,t.x),r=xr(h,t.y);return o=a=null,function(i){s=t.x=e(i),h=t.y=r(i),n({type:"brush",mode:"resize"})}}).each("end.brush",function(){o=t.i,a=t.j,n({type:"brush",mode:"resize"}),n({type:"brushend"})}):(n({type:"brushstart"}),n({type:"brush",mode:"resize"}),n({type:"brushend"}))})},n.x=function(t){return arguments.length?(c=t,v=Bl[!c<<1|!f],n):c},n.y=function(t){return arguments.length?(f=t,v=Bl[!c<<1|!f],n):f},n.clamp=function(t){return arguments.length?(c&&f?(p=!!t[0],g=!!t[1]):c?p=!!t:f&&(g=!!t),n):c&&f?[p,g]:c?p:f?g:null},n.extent=function(t){var e,r,i,u,l;return arguments.length?(c&&(e=t[0],r=t[1],f&&(e=e[0],r=r[0]),o=[e,r],c.invert&&(e=c(e),r=c(r)),e>r&&(l=e,e=r,r=l),e==s[0]&&r==s[1]||(s=[e,r])),f&&(i=t[0],u=t[1],c&&(i=i[1],u=u[1]),a=[i,u],f.invert&&(i=f(i),u=f(u)),i>u&&(l=i,i=u,u=l),i==h[0]&&u==h[1]||(h=[i,u])),n):(c&&(o?(e=o[0],r=o[1]):(e=s[0],r=s[1],c.invert&&(e=c.invert(e),r=c.invert(r)),e>r&&(l=e,e=r,r=l))),f&&(a?(i=a[0],u=a[1]):(i=h[0],u=h[1],f.invert&&(i=f.invert(i),u=f.invert(u)),i>u&&(l=i,i=u,u=l))),c&&f?[[e,i],[r,u]]:c?[e,r]:f&&[i,u])},n.clear=function(){return n.empty()||(s=[0,0],h=[0,0],o=a=null),n},n.empty=function(){return!!c&&s[0]==s[1]||!!f&&h[0]==h[1]},ao.rebind(n,l,"on")};var $l={n:"ns-resize",e:"ew-resize",s:"ns-resize",w:"ew-resize",nw:"nwse-resize",ne:"nesw-resize",se:"nwse-resize",sw:"nesw-resize"},Bl=[["n","e","s","w","nw","ne","se","sw"],["e","w"],["n","s"],[]],Wl=ga.format=xa.timeFormat,Jl=Wl.utc,Gl=Jl("%Y-%m-%dT%H:%M:%S.%LZ");Wl.iso=Date.prototype.toISOString&&+new Date("2000-01-01T00:00:00.000Z")?eo:Gl,eo.parse=function(n){var t=new Date(n);return isNaN(t)?null:t},eo.toString=Gl.toString,ga.second=On(function(n){return new va(1e3*Math.floor(n/1e3))},function(n,t){n.setTime(n.getTime()+1e3*Math.floor(t))},function(n){return n.getSeconds()}),ga.seconds=ga.second.range,ga.seconds.utc=ga.second.utc.range,ga.minute=On(function(n){return new va(6e4*Math.floor(n/6e4))},function(n,t){n.setTime(n.getTime()+6e4*Math.floor(t))},function(n){return n.getMinutes()}),ga.minutes=ga.minute.range,ga.minutes.utc=ga.minute.utc.range,ga.hour=On(function(n){var t=n.getTimezoneOffset()/60;return new va(36e5*(Math.floor(n/36e5-t)+t))},function(n,t){n.setTime(n.getTime()+36e5*Math.floor(t))},function(n){return n.getHours()}),ga.hours=ga.hour.range,ga.hours.utc=ga.hour.utc.range,ga.month=On(function(n){return n=ga.day(n),n.setDate(1),n},function(n,t){n.setMonth(n.getMonth()+t)},function(n){return n.getMonth()}),ga.months=ga.month.range,ga.months.utc=ga.month.utc.range;var Kl=[1e3,5e3,15e3,3e4,6e4,3e5,9e5,18e5,36e5,108e5,216e5,432e5,864e5,1728e5,6048e5,2592e6,7776e6,31536e6],Ql=[[ga.second,1],[ga.second,5],[ga.second,15],[ga.second,30],[ga.minute,1],[ga.minute,5],[ga.minute,15],[ga.minute,30],[ga.hour,1],[ga.hour,3],[ga.hour,6],[ga.hour,12],[ga.day,1],[ga.day,2],[ga.week,1],[ga.month,1],[ga.month,3],[ga.year,1]],nc=Wl.multi([[".%L",function(n){return n.getMilliseconds()}],[":%S",function(n){return n.getSeconds()}],["%I:%M",function(n){return n.getMinutes()}],["%I %p",function(n){return n.getHours()}],["%a %d",function(n){return n.getDay()&&1!=n.getDate()}],["%b %d",function(n){return 1!=n.getDate()}],["%B",function(n){return n.getMonth()}],["%Y",zt]]),tc={range:function(n,t,e){return ao.range(Math.ceil(n/e)*e,+t,e).map(io)},floor:m,ceil:m};Ql.year=ga.year,ga.scale=function(){return ro(ao.scale.linear(),Ql,nc)};var ec=Ql.map(function(n){return[n[0].utc,n[1]]}),rc=Jl.multi([[".%L",function(n){return n.getUTCMilliseconds()}],[":%S",function(n){return n.getUTCSeconds()}],["%I:%M",function(n){return n.getUTCMinutes()}],["%I %p",function(n){return n.getUTCHours()}],["%a %d",function(n){return n.getUTCDay()&&1!=n.getUTCDate()}],["%b %d",function(n){return 1!=n.getUTCDate()}],["%B",function(n){return n.getUTCMonth()}],["%Y",zt]]);ec.year=ga.year.utc,ga.scale.utc=function(){return ro(ao.scale.linear(),ec,rc)},ao.text=An(function(n){return n.responseText}),ao.json=function(n,t){return Cn(n,"application/json",uo,t)},ao.html=function(n,t){return Cn(n,"text/html",oo,t)},ao.xml=An(function(n){return n.responseXML}),"function"==typeof define&&define.amd?(this.d3=ao,define(ao)):"object"==typeof module&&module.exports?module.exports=ao:this.d3=ao}(); \ No newline at end of file diff --git a/webvowl/js/webvowl.app.js b/webvowl/js/webvowl.app.js new file mode 100644 index 0000000..9990201 --- /dev/null +++ b/webvowl/js/webvowl.app.js @@ -0,0 +1,9457 @@ +webvowl.app = +/******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; + +/******/ // The require function +/******/ function __webpack_require__(moduleId) { + +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) +/******/ return installedModules[moduleId].exports; + +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ exports: {}, +/******/ id: moduleId, +/******/ loaded: false +/******/ }; + +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); + +/******/ // Flag the module as loaded +/******/ module.loaded = true; + +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } + + +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; + +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; + +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; + +/******/ // Load entry module and return exports +/******/ return __webpack_require__(0); +/******/ }) +/************************************************************************/ +/******/ ({ + +/***/ 0: +/***/ (function(module, exports, __webpack_require__) { + + __webpack_require__(319); + __webpack_require__(321); + + module.exports = __webpack_require__(322); + + +/***/ }), + +/***/ 6: +/***/ (function(module, exports) { + + module.exports = d3; + +/***/ }), + +/***/ 91: +/***/ (function(module, exports, __webpack_require__) { + + var Symbol = __webpack_require__(92), + getRawTag = __webpack_require__(95), + objectToString = __webpack_require__(96); + + /** `Object#toString` result references. */ + var nullTag = '[object Null]', + undefinedTag = '[object Undefined]'; + + /** Built-in value references. */ + var symToStringTag = Symbol ? Symbol.toStringTag : undefined; + + /** + * The base implementation of `getTag` without fallbacks for buggy environments. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ + function baseGetTag(value) { + if (value == null) { + return value === undefined ? undefinedTag : nullTag; + } + return (symToStringTag && symToStringTag in Object(value)) + ? getRawTag(value) + : objectToString(value); + } + + module.exports = baseGetTag; + + +/***/ }), + +/***/ 92: +/***/ (function(module, exports, __webpack_require__) { + + var root = __webpack_require__(93); + + /** Built-in value references. */ + var Symbol = root.Symbol; + + module.exports = Symbol; + + +/***/ }), + +/***/ 93: +/***/ (function(module, exports, __webpack_require__) { + + var freeGlobal = __webpack_require__(94); + + /** Detect free variable `self`. */ + var freeSelf = typeof self == 'object' && self && self.Object === Object && self; + + /** Used as a reference to the global object. */ + var root = freeGlobal || freeSelf || Function('return this')(); + + module.exports = root; + + +/***/ }), + +/***/ 94: +/***/ (function(module, exports) { + + /* WEBPACK VAR INJECTION */(function(global) {/** Detect free variable `global` from Node.js. */ + var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; + + module.exports = freeGlobal; + + /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }()))) + +/***/ }), + +/***/ 95: +/***/ (function(module, exports, __webpack_require__) { + + var Symbol = __webpack_require__(92); + + /** Used for built-in method references. */ + var objectProto = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty = objectProto.hasOwnProperty; + + /** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ + var nativeObjectToString = objectProto.toString; + + /** Built-in value references. */ + var symToStringTag = Symbol ? Symbol.toStringTag : undefined; + + /** + * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the raw `toStringTag`. + */ + function getRawTag(value) { + var isOwn = hasOwnProperty.call(value, symToStringTag), + tag = value[symToStringTag]; + + try { + value[symToStringTag] = undefined; + var unmasked = true; + } catch (e) {} + + var result = nativeObjectToString.call(value); + if (unmasked) { + if (isOwn) { + value[symToStringTag] = tag; + } else { + delete value[symToStringTag]; + } + } + return result; + } + + module.exports = getRawTag; + + +/***/ }), + +/***/ 96: +/***/ (function(module, exports) { + + /** Used for built-in method references. */ + var objectProto = Object.prototype; + + /** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ + var nativeObjectToString = objectProto.toString; + + /** + * Converts `value` to a string using `Object.prototype.toString`. + * + * @private + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + */ + function objectToString(value) { + return nativeObjectToString.call(value); + } + + module.exports = objectToString; + + +/***/ }), + +/***/ 103: +/***/ (function(module, exports, __webpack_require__) { + + var baseGetTag = __webpack_require__(91), + isObjectLike = __webpack_require__(104); + + /** `Object#toString` result references. */ + var symbolTag = '[object Symbol]'; + + /** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ + function isSymbol(value) { + return typeof value == 'symbol' || + (isObjectLike(value) && baseGetTag(value) == symbolTag); + } + + module.exports = isSymbol; + + +/***/ }), + +/***/ 104: +/***/ (function(module, exports) { + + /** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ + function isObjectLike(value) { + return value != null && typeof value == 'object'; + } + + module.exports = isObjectLike; + + +/***/ }), + +/***/ 112: +/***/ (function(module, exports) { + + /** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(document.body.children); + * // => false + * + * _.isArray('abc'); + * // => false + * + * _.isArray(_.noop); + * // => false + */ + var isArray = Array.isArray; + + module.exports = isArray; + + +/***/ }), + +/***/ 154: +/***/ (function(module, exports) { + + /** + * A specialized version of `_.map` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ + function arrayMap(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length, + result = Array(length); + + while (++index < length) { + result[index] = iteratee(array[index], index, array); + } + return result; + } + + module.exports = arrayMap; + + +/***/ }), + +/***/ 219: +/***/ (function(module, exports, __webpack_require__) { + + var baseToString = __webpack_require__(220); + + /** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ + function toString(value) { + return value == null ? '' : baseToString(value); + } + + module.exports = toString; + + +/***/ }), + +/***/ 220: +/***/ (function(module, exports, __webpack_require__) { + + var Symbol = __webpack_require__(92), + arrayMap = __webpack_require__(154), + isArray = __webpack_require__(112), + isSymbol = __webpack_require__(103); + + /** Used as references for various `Number` constants. */ + var INFINITY = 1 / 0; + + /** Used to convert symbols to primitives and strings. */ + var symbolProto = Symbol ? Symbol.prototype : undefined, + symbolToString = symbolProto ? symbolProto.toString : undefined; + + /** + * The base implementation of `_.toString` which doesn't convert nullish + * values to empty strings. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ + function baseToString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if (isArray(value)) { + // Recursively convert values (susceptible to call stack limits). + return arrayMap(value, baseToString) + ''; + } + if (isSymbol(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; + } + + module.exports = baseToString; + + +/***/ }), + +/***/ 319: +/***/ (function(module, exports) { + + // removed by extract-text-webpack-plugin + +/***/ }), + +/***/ 321: +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {/* Taken from here: http://stackoverflow.com/a/17907562 */ + function getInternetExplorerVersion(){ + var ua, + re, + rv = -1; + + // check for edge + var isEdge = /(?:\b(MS)?IE\s+|\bTrident\/7\.0;.*\s+rv:|\bEdge\/)(\d+)/.test(navigator.userAgent); + if ( isEdge ) { + rv = parseInt("12"); + return rv; + } + + var isIE11 = /Trident.*rv[ :]*11\./.test(navigator.userAgent); + if ( isIE11 ) { + rv = parseInt("11"); + return rv; + } + if ( navigator.appName === "Microsoft Internet Explorer" ) { + ua = navigator.userAgent; + re = new RegExp("MSIE ([0-9]{1,}[\\.0-9]{0,})"); + if ( re.exec(ua) !== null ) { + rv = parseFloat(RegExp.$1); + } + } else if ( navigator.appName === "Netscape" ) { + ua = navigator.userAgent; + re = new RegExp("Trident/.*rv:([0-9]{1,}[\\.0-9]{0,})"); + if ( re.exec(ua) !== null ) { + rv = parseFloat(RegExp.$1); + } + } + return rv; + } + + function showBrowserWarningIfRequired(){ + var version = getInternetExplorerVersion(); + console.log("Browser Version =" + version); + if ( version > 0 && version <= 11 ) { + d3.select("#browserCheck").classed("hidden", false); + d3.select("#killWarning").classed("hidden", true); + d3.select("#optionsArea").classed("hidden", true); + d3.select("#logo").classed("hidden", true); + } + if ( version == 12 ) { + d3.select("#logo").classed("hidden", false); + d3.select("#browserCheck").classed("hidden", false); + // connect the button; + var pb_kill = d3.select("#killWarning"); + pb_kill.on("click", function (){ + console.log("hide the warning please"); + d3.select("#browserCheck").classed("hidden", true); + d3.select("#logo").style("padding", "10px"); + }); + } + else { + d3.select("#logo").classed("hidden", false); + d3.select("#browserCheck").classed("hidden", true); + } + + } + + module.exports = showBrowserWarningIfRequired; + showBrowserWarningIfRequired(); + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), + +/***/ 322: +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {String.prototype.replaceAll = function ( search, replacement ){ + var target = this; + return target.split(search).join(replacement); + }; + module.exports = function (){ + var newOntologyCounter = 1; + var app = {}, + graph = webvowl.graph(), + options = graph.graphOptions(), + languageTools = webvowl.util.languageTools(), + GRAPH_SELECTOR = "#graph", + // Modules for the webvowl app + exportMenu = __webpack_require__(323)(graph), + filterMenu = __webpack_require__(325)(graph), + gravityMenu = __webpack_require__(326)(graph), + modeMenu = __webpack_require__(327)(graph), + debugMenu = __webpack_require__(328)(graph), + ontologyMenu = __webpack_require__(329)(graph), + pauseMenu = __webpack_require__(333)(graph), + resetMenu = __webpack_require__(334)(graph), + searchMenu = __webpack_require__(335)(graph), + navigationMenu = __webpack_require__(336)(graph), + zoomSlider = __webpack_require__(337)(graph), + sidebar = __webpack_require__(338)(graph), + leftSidebar = __webpack_require__(339)(graph), + editSidebar = __webpack_require__(340)(graph), + configMenu = __webpack_require__(341)(graph), + loadingModule = __webpack_require__(342)(graph), + warningModule = __webpack_require__(343)(graph), + directInputMod = __webpack_require__(344)(graph), + + + // Graph modules + colorExternalsSwitch = webvowl.modules.colorExternalsSwitch(graph), + compactNotationSwitch = webvowl.modules.compactNotationSwitch(graph), + datatypeFilter = webvowl.modules.datatypeFilter(), + disjointFilter = webvowl.modules.disjointFilter(), + focuser = webvowl.modules.focuser(graph), + emptyLiteralFilter = webvowl.modules.emptyLiteralFilter(), + nodeDegreeFilter = webvowl.modules.nodeDegreeFilter(filterMenu), + nodeScalingSwitch = webvowl.modules.nodeScalingSwitch(graph), + objectPropertyFilter = webvowl.modules.objectPropertyFilter(), + pickAndPin = webvowl.modules.pickAndPin(), + selectionDetailDisplayer = webvowl.modules.selectionDetailsDisplayer(sidebar.updateSelectionInformation), + statistics = webvowl.modules.statistics(), + subclassFilter = webvowl.modules.subclassFilter(), + setOperatorFilter = webvowl.modules.setOperatorFilter(); + + + app.getOptions = function (){ + return webvowl.opts; + }; + app.getGraph = function (){ + return webvowl.gr; + }; + // app.afterInitializationCallback=undefined; + + + var executeFileDrop = false; + var wasMessageToShow = false; + var firstTime = false; + + function addFileDropEvents( selector ){ + var node = d3.select(selector); + + node.node().ondragover = function ( e ){ + e.preventDefault(); + + d3.select("#dragDropContainer").classed("hidden", false); + // get svg size + var w = graph.options().width(); + var h = graph.options().height(); + + // get event position; (using clientX and clientY); + var cx = e.clientX; + var cy = e.clientY; + + if ( firstTime === false ) { + var state = d3.select("#loading-info").classed("hidden"); + wasMessageToShow = !state; + firstTime = true; + d3.select("#loading-info").classed("hidden", true); // hide it so it does not conflict with drop event + var bb=d3.select("#drag_msg").node().getBoundingClientRect(); + var hs = bb.height; + var ws = bb.width; + + var icon_scale=Math.min(hs,ws); + icon_scale/=100; + + d3.select("#drag_icon_group").attr("transform", "translate ( " + 0.25 * ws + " " + 0.25 * hs + ")"); + d3.select("#drag_icon").attr("transform","matrix ("+icon_scale+",0,0,"+icon_scale+",0,0)"); + d3.select("#drag_icon_drop").attr("transform","matrix ("+icon_scale+",0,0,"+icon_scale+",0,0)"); + } + + + if ( (cx > 0.25 * w && cx < 0.75 * w) && (cy > 0.25 * h && cy < 0.75 * h) ) { + + d3.select("#drag_msg_text").node().innerHTML = "Drop it here."; + d3.select("#drag_msg").style("background-color", "#67bc0f"); + d3.select("#drag_msg").style("color", "#000000"); + executeFileDrop = true; + // d3.select("#drag_svg").transition() + // .duration(100) + // // .attr("-webkit-transform", "rotate(90)") + // // .attr("-moz-transform", "rotate(90)") + // // .attr("-o-transform", "rotate(90)") + // .attr("transform", "rotate(90)"); + + d3.select("#drag_icon").classed("hidden",true); + d3.select("#drag_icon_drop").classed("hidden",false); + + + } else { + d3.select("#drag_msg_text").node().innerHTML = "Drag ontology file here."; + d3.select("#drag_msg").style("background-color", "#fefefe"); + d3.select("#drag_msg").style("color", "#000000"); + executeFileDrop = false; + + d3.select("#drag_icon").classed("hidden",false); + d3.select("#drag_icon_drop").classed("hidden",true); + + + // d3.select("#drag_svg").transition() + // .duration(100) + // // .attr("-webkit-transform", "rotate(0)") + // // .attr("-moz-transform", "rotate(0)") + // // .attr("-o-transform", "rotate(0)") + // .attr("transform", "rotate(0)"); + // + } + + }; + node.node().ondrop = function ( ev ){ + ev.preventDefault(); + firstTime = false; + if ( executeFileDrop ) { + if ( ev.dataTransfer.items ) { + if ( ev.dataTransfer.items.length === 1 ) { + if ( ev.dataTransfer.items[0].kind === 'file' ) { + var file = ev.dataTransfer.items[0].getAsFile(); + graph.options().loadingModule().fromFileDrop(file.name, file); + } + } + else { + // >> WARNING not multiple file uploaded; + graph.options().warningModule().showMultiFileUploadWarning(); + } + } + } + d3.select("#dragDropContainer").classed("hidden", true); + }; + + node.node().ondragleave = function ( e ){ + var w = graph.options().width(); + var h = graph.options().height(); + + // get event position; (using clientX and clientY); + var cx = e.clientX; + var cy = e.clientY; + + var hidden = false; + firstTime = false; + + if ( cx < 0.1 * w || cx > 0.9 * w ) hidden = true; + if ( cy < 0.1 * h || cy > 0.9 * h ) hidden = true; + d3.select("#dragDropContainer").classed("hidden", hidden); + + d3.select("#loading-info").classed("hidden", !wasMessageToShow); // show it again + // check if it should be visible + var should_show=graph.options().loadingModule().getMessageVisibilityStatus(); + if (should_show===false){ + d3.select("#loading-info").classed("hidden", true); // hide it + } + }; + + } + + + app.initialize = function (){ + addFileDropEvents(GRAPH_SELECTOR); + + window.requestAnimationFrame = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.msRequestAnimationFrame || function ( f ){ + return setTimeout(f, 1000 / 60); + }; // simulate calling code 60 + window.cancelAnimationFrame = window.cancelAnimationFrame || window.mozCancelAnimationFrame || function ( requestID ){ + clearTimeout(requestID); + }; //fall back + + options.graphContainerSelector(GRAPH_SELECTOR); + options.selectionModules().push(focuser); + options.selectionModules().push(selectionDetailDisplayer); + options.selectionModules().push(pickAndPin); + + options.filterModules().push(emptyLiteralFilter); + options.filterModules().push(statistics); + + options.filterModules().push(nodeDegreeFilter); + options.filterModules().push(datatypeFilter); + options.filterModules().push(objectPropertyFilter); + options.filterModules().push(subclassFilter); + options.filterModules().push(disjointFilter); + options.filterModules().push(setOperatorFilter); + options.filterModules().push(nodeScalingSwitch); + options.filterModules().push(compactNotationSwitch); + options.filterModules().push(colorExternalsSwitch); + + d3.select(window).on("resize", adjustSize); + + exportMenu.setup(); + gravityMenu.setup(); + filterMenu.setup(datatypeFilter, objectPropertyFilter, subclassFilter, disjointFilter, setOperatorFilter, nodeDegreeFilter); + modeMenu.setup(pickAndPin, nodeScalingSwitch, compactNotationSwitch, colorExternalsSwitch); + pauseMenu.setup(); + sidebar.setup(); + loadingModule.setup(); + leftSidebar.setup(); + editSidebar.setup(); + debugMenu.setup(); + var agentVersion = getInternetExplorerVersion(); + if ( agentVersion > 0 && agentVersion <= 11 ) { + console.log("Agent version " + agentVersion); + console.log("This agent is not supported"); + d3.select("#browserCheck").classed("hidden", false); + d3.select("#killWarning").classed("hidden", true); + d3.select("#optionsArea").classed("hidden", true); + d3.select("#logo").classed("hidden", true); + } else { + d3.select("#logo").classed("hidden", false); + if ( agentVersion === 12 ) { + // allow Mircosoft Edge Browser but with warning + d3.select("#browserCheck").classed("hidden", false); + d3.select("#killWarning").classed("hidden", false); + } else { + d3.select("#browserCheck").classed("hidden", true); + } + + resetMenu.setup([gravityMenu, filterMenu, modeMenu, focuser, selectionDetailDisplayer, pauseMenu]); + searchMenu.setup(); + navigationMenu.setup(); + zoomSlider.setup(); + + // give the options the pointer to the some menus for import and export + options.literalFilter(emptyLiteralFilter); + options.nodeDegreeFilter(nodeDegreeFilter); + options.loadingModule(loadingModule); + options.filterMenu(filterMenu); + options.modeMenu(modeMenu); + options.gravityMenu(gravityMenu); + options.pausedMenu(pauseMenu); + options.pickAndPinModule(pickAndPin); + options.resetMenu(resetMenu); + options.searchMenu(searchMenu); + options.ontologyMenu(ontologyMenu); + options.navigationMenu(navigationMenu); + options.sidebar(sidebar); + options.leftSidebar(leftSidebar); + options.editSidebar(editSidebar); + options.exportMenu(exportMenu); + options.graphObject(graph); + options.zoomSlider(zoomSlider); + options.warningModule(warningModule); + options.directInputModule(directInputMod); + options.datatypeFilter(datatypeFilter); + options.objectPropertyFilter(objectPropertyFilter); + options.subclassFilter(subclassFilter); + options.setOperatorFilter(setOperatorFilter); + options.disjointPropertyFilter(disjointFilter); + options.focuserModule(focuser); + options.colorExternalsModule(colorExternalsSwitch); + options.compactNotationModule(compactNotationSwitch); + + ontologyMenu.setup(loadOntologyFromText); + configMenu.setup(); + + leftSidebar.showSidebar(0); + leftSidebar.hideCollapseButton(true); + + + graph.start(); + + var modeOp = d3.select("#modeOfOperationString"); + modeOp.style("font-size", "0.6em"); + modeOp.style("font-style", "italic"); + + adjustSize(); + var defZoom; + var w = graph.options().width(); + var h = graph.options().height(); + defZoom = Math.min(w, h) / 1000; + + var hideDebugOptions = true; + if ( hideDebugOptions === false ) { + graph.setForceTickFunctionWithFPS(); + } + + graph.setDefaultZoom(defZoom); + d3.selectAll(".debugOption").classed("hidden", hideDebugOptions); + + // prevent backspace reloading event + var htmlBody = d3.select("body"); + d3.select(document).on("keydown", function ( e ){ + if ( d3.event.keyCode === 8 && d3.event.target === htmlBody.node() ) { + // we could add here an alert + d3.event.preventDefault(); + } + // using ctrl+Shift+d as debug option + if ( d3.event.ctrlKey && d3.event.shiftKey && d3.event.keyCode === 68 ) { + graph.options().executeHiddenDebugFeatuers(); + d3.event.preventDefault(); + } + }); + if ( d3.select("#maxLabelWidthSliderOption") ) { + var setValue = !graph.options().dynamicLabelWidth(); + d3.select("#maxLabelWidthSlider").node().disabled = setValue; + d3.select("#maxLabelWidthvalueLabel").classed("disabledLabelForSlider", setValue); + d3.select("#maxLabelWidthDescriptionLabel").classed("disabledLabelForSlider", setValue); + } + + d3.select("#blockGraphInteractions").style("position", "absolute") + .style("top", "0") + .style("background-color", "#bdbdbd") + .style("opacity", "0.5") + .style("pointer-events", "auto") + .style("width", graph.options().width() + "px") + .style("height", graph.options().height() + "px") + .on("click", function (){ + d3.event.preventDefault(); + d3.event.stopPropagation(); + }) + .on("dblclick", function (){ + d3.event.preventDefault(); + d3.event.stopPropagation(); + }); + + d3.select("#direct-text-input").on("click", function (){ + directInputMod.setDirectInputMode(); + }); + d3.select("#blockGraphInteractions").node().draggable = false; + options.prefixModule(webvowl.util.prefixTools(graph)); + adjustSize(); + sidebar.updateOntologyInformation(undefined, statistics); + loadingModule.parseUrlAndLoadOntology(); // loads automatically the ontology provided by the parameters + options.debugMenu(debugMenu); + debugMenu.updateSettings(); + + // connect the reloadCachedVersionButton + d3.select("#reloadSvgIcon").on("click", function (){ + if ( d3.select("#reloadSvgIcon").node().disabled === true ) { + graph.options().ontologyMenu().clearCachedVersion(); + return; + } + d3.select("#reloadCachedOntology").classed("hidden", true); + graph.options().ontologyMenu().reloadCachedOntology(); + + }); + // add the initialized objects + webvowl.opts = options; + webvowl.gr = graph; + + } + }; + + + function loadOntologyFromText( jsonText, filename, alternativeFilename ){ + d3.select("#reloadCachedOntology").classed("hidden", true); + pauseMenu.reset(); + graph.options().navigationMenu().hideAllMenus(); + + if ( (jsonText === undefined && filename === undefined) || (jsonText.length === 0) ) { + loadingModule.notValidJsonFile(); + return; + } + graph.editorMode(); // updates the checkbox + var data; + if ( jsonText ) { + // validate JSON FILE + var validJSON; + try { + data = JSON.parse(jsonText); + validJSON = true; + } catch ( e ) { + validJSON = false; + } + if ( validJSON === false ) { + // the server output is not a valid json file + loadingModule.notValidJsonFile(); + return; + } + + if ( !filename ) { + // First look if an ontology title exists, otherwise take the alternative filename + var ontologyNames = data.header ? data.header.title : undefined; + var ontologyName = languageTools.textInLanguage(ontologyNames); + + if ( ontologyName ) { + filename = ontologyName; + } else { + filename = alternativeFilename; + } + } + } + + + // check if we have graph data + var classCount = 0; + if ( data.class !== undefined ) { + classCount = data.class.length; + } + + var loadEmptyOntologyForEditing = false; + if ( location.hash.indexOf("#new_ontology") !== -1 ) { + loadEmptyOntologyForEditing = true; + newOntologyCounter++; + d3.select("#empty").node().href = "#opts=editorMode=true;#new_ontology" + newOntologyCounter; + } + if ( classCount === 0 && graph.editorMode() === false && loadEmptyOntologyForEditing === false ) { + // generate message for the user; + loadingModule.emptyGraphContentError(); + } else { + loadingModule.validJsonFile(); + ontologyMenu.setCachedOntology(filename, jsonText); + exportMenu.setJsonText(jsonText); + options.data(data); + graph.options().loadingModule().setPercentMode(); + if ( loadEmptyOntologyForEditing === true ) { + graph.editorMode(true); + + } + graph.load(); + sidebar.updateOntologyInformation(data, statistics); + exportMenu.setFilename(filename); + graph.updateZoomSliderValueFromOutside(); + adjustSize(); + + var flagOfCheckBox = d3.select("#editorModeModuleCheckbox").node().checked; + graph.editorMode(flagOfCheckBox);// update gui + + } + } + + function adjustSize(){ + var graphContainer = d3.select(GRAPH_SELECTOR), + svg = graphContainer.select("svg"), + height = window.innerHeight - 40, + width = window.innerWidth - (window.innerWidth * 0.22); + + if ( sidebar.getSidebarVisibility() === "0" ) { + height = window.innerHeight - 40; + width = window.innerWidth; + } + + directInputMod.updateLayout(); + d3.select("#blockGraphInteractions").style("width", window.innerWidth + "px"); + d3.select("#blockGraphInteractions").style("height", window.innerHeight + "px"); + + d3.select("#WarningErrorMessagesContainer").style("width", width + "px"); + d3.select("#WarningErrorMessagesContainer").style("height", height + "px"); + + d3.select("#WarningErrorMessages").style("max-height", (height - 12) + "px"); + + graphContainer.style("height", height + "px"); + svg.attr("width", width) + .attr("height", height); + + options.width(width) + .height(height); + + graph.updateStyle(); + + if ( isTouchDevice() === true ) { + if ( graph.isEditorMode() === true ) + d3.select("#modeOfOperationString").node().innerHTML = "touch able device detected"; + graph.setTouchDevice(true); + + } else { + if ( graph.isEditorMode() === true ) + d3.select("#modeOfOperationString").node().innerHTML = "point & click device detected"; + graph.setTouchDevice(false); + } + + d3.select("#loadingInfo-container").style("height", 0.5 * (height - 80) + "px"); + loadingModule.checkForScreenSize(); + + adjustSliderSize(); + // update also the padding options of loading and the logo positions; + var warningDiv = d3.select("#browserCheck"); + if ( warningDiv.classed("hidden") === false ) { + var offset = 10 + warningDiv.node().getBoundingClientRect().height; + d3.select("#logo").style("padding", offset + "px 10px"); + } else { + // remove the dynamic padding from the logo element; + d3.select("#logo").style("padding", "10px"); + } + + // scrollbar tests; + var element = d3.select("#menuElementContainer").node(); + var maxScrollLeft = element.scrollWidth - element.clientWidth; + var leftButton = d3.select("#scrollLeftButton"); + var rightButton = d3.select("#scrollRightButton"); + if ( maxScrollLeft > 0 ) { + // show both and then check how far is bar; + rightButton.classed("hidden", false); + leftButton.classed("hidden", false); + navigationMenu.updateScrollButtonVisibility(); + } else { + // hide both; + rightButton.classed("hidden", true); + leftButton.classed("hidden", true); + } + + // adjust height of the leftSidebar element; + editSidebar.updateElementWidth(); + + + var hs = d3.select("#drag_msg").node().getBoundingClientRect().height; + var ws = d3.select("#drag_msg").node().getBoundingClientRect().width; + d3.select("#drag_icon_group").attr("transform", "translate ( " + 0.25 * ws + " " + 0.25 * hs + ")"); + + } + + function adjustSliderSize(){ + // TODO: refactor and put this into the slider it self + var height = window.innerHeight - 40; + var fullHeight = height; + var zoomOutPos = height - 30; + var sliderHeight = 150; + + // assuming DOM elements are generated in the index.html + // todo: refactor for independent usage of graph and app + if ( fullHeight < 150 ) { + // hide the slider button; + d3.select("#zoomSliderParagraph").classed("hidden", true); + d3.select("#zoomOutButton").classed("hidden", true); + d3.select("#zoomInButton").classed("hidden", true); + d3.select("#centerGraphButton").classed("hidden", true); + return; + } + d3.select("#zoomSliderParagraph").classed("hidden", false); + d3.select("#zoomOutButton").classed("hidden", false); + d3.select("#zoomInButton").classed("hidden", false); + d3.select("#centerGraphButton").classed("hidden", false); + + var zoomInPos = zoomOutPos - 20; + var centerPos = zoomInPos - 20; + if ( fullHeight < 280 ) { + // hide the slider button; + d3.select("#zoomSliderParagraph").classed("hidden", true);//var sliderPos=zoomOutPos-sliderHeight; + d3.select("#zoomOutButton").style("top", zoomOutPos + "px"); + d3.select("#zoomInButton").style("top", zoomInPos + "px"); + d3.select("#centerGraphButton").style("top", centerPos + "px"); + return; + } + + var sliderPos = zoomOutPos - sliderHeight; + zoomInPos = sliderPos - 20; + centerPos = zoomInPos - 20; + d3.select("#zoomSliderParagraph").classed("hidden", false); + d3.select("#zoomOutButton").style("top", zoomOutPos + "px"); + d3.select("#zoomInButton").style("top", zoomInPos + "px"); + d3.select("#centerGraphButton").style("top", centerPos + "px"); + d3.select("#zoomSliderParagraph").style("top", sliderPos + "px"); + } + + function isTouchDevice(){ + try { + document.createEvent("TouchEvent"); + return true; + } catch ( e ) { + return false; + } + } + + + function getInternetExplorerVersion(){ + var ua, + re, + rv = -1; + + // check for edge + var isEdge = /(?:\b(MS)?IE\s+|\bTrident\/7\.0;.*\s+rv:|\bEdge\/)(\d+)/.test(navigator.userAgent); + if ( isEdge ) { + rv = parseInt("12"); + return rv; + } + + var isIE11 = /Trident.*rv[ :]*11\./.test(navigator.userAgent); + if ( isIE11 ) { + rv = parseInt("11"); + return rv; + } + if ( navigator.appName === "Microsoft Internet Explorer" ) { + ua = navigator.userAgent; + re = new RegExp("MSIE ([0-9]{1,}[\\.0-9]{0,})"); + if ( re.exec(ua) !== null ) { + rv = parseFloat(RegExp.$1); + } + } else if ( navigator.appName === "Netscape" ) { + ua = navigator.userAgent; + re = new RegExp("Trident/.*rv:([0-9]{1,}[\\.0-9]{0,})"); + if ( re.exec(ua) !== null ) { + rv = parseFloat(RegExp.$1); + } + } + return rv; + } + + return app; + } + ; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), + +/***/ 323: +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {/** + * Contains the logic for the export button. + * @returns {{}} + */ + module.exports = function ( graph ){ + + var exportMenu = {}, + exportSvgButton, + exportFilename, + exportJsonButton, + exportTurtleButton, + exportTexButton, + copyButton, + exportableJsonText; + + var exportTTLModule = __webpack_require__(324)(graph); + + + String.prototype.replaceAll = function ( search, replacement ){ + var target = this; + return target.split(search).join(replacement); + }; + + + /** + * Adds the export button to the website. + */ + exportMenu.setup = function (){ + exportSvgButton = d3.select("#exportSvg") + .on("click", exportSvg); + exportJsonButton = d3.select("#exportJson") + .on("click", exportJson); + + copyButton = d3.select("#copyBt") + .on("click", copyUrl); + + exportTexButton = d3.select("#exportTex") + .on("click", exportTex); + + exportTurtleButton = d3.select("#exportTurtle") + .on("click", exportTurtle); + + var menuEntry = d3.select("#m_export"); + menuEntry.on("mouseover", function (){ + var searchMenu = graph.options().searchMenu(); + searchMenu.hideSearchEntries(); + exportMenu.exportAsUrl(); + }); + }; + function exportTurtle(){ + var success = exportTTLModule.requestExport(); + var result = exportTTLModule.resultingTTL_Content(); + var ontoTitle = "NewOntology"; + console.log("Exporter was successful: " + success); + if ( success ) { + // console.log("The result is : " + result); + // var ontoTitle=graph.options().getGeneralMetaObjectProperty('title'); + // if (ontoTitle===undefined || ontoTitle.length===0) + // ontoTitle="NewOntology"; + // else{ + // // language object -.- + // ontoTitle.replace(" ","_") + // } + + // TODO: show TEXT in warning module? + + + // // write the data + var dataURI = "data:text/json;charset=utf-8," + encodeURIComponent(result); + + exportTurtleButton.attr("href", dataURI) + .attr("download", ontoTitle + ".ttl"); + + // okay restore old href? + // exportTurtleButton.attr("href", oldHref); + } else { + console.log("ShowWarning!"); + graph.options().warningModule().showExporterWarning(); + console.log("Stay on the page! " + window.location.href); + exportTurtleButton.attr("href", window.location.href); + d3.event.preventDefault(); // prevent the href to be called ( reloads the page otherwise ) + } + } + + exportMenu.setFilename = function ( filename ){ + exportFilename = filename || "export"; + }; + + exportMenu.setJsonText = function ( jsonText ){ + exportableJsonText = jsonText; + }; + + function copyUrl(){ + d3.select("#exportedUrl").node().focus(); + d3.select("#exportedUrl").node().select(); + document.execCommand("copy"); + graph.options().navigationMenu().hideAllMenus(); + d3.event.preventDefault(); // prevent the href to be called ( reloads the page otherwise ) + } + + function prepareOptionString( defOpts, currOpts ){ + var setOptions = 0; + var optsString = "opts="; + + for ( var name in defOpts ) { + // define key and value ; + if ( defOpts.hasOwnProperty(name) ) {// for travis warning + var def_value = defOpts[name]; + var cur_value = currOpts[name]; + if ( def_value !== cur_value ) { + optsString += name + "=" + cur_value + ";"; + setOptions++; + } + } + } + optsString += ""; + if ( setOptions === 0 ) { + return ""; + } + return optsString; + } + + exportMenu.exportAsUrl = function (){ + var currObj = {}; + currObj.sidebar = graph.options().sidebar().getSidebarVisibility(); + + // identify default value given by ontology; + var defOntValue = graph.options().filterMenu().getDefaultDegreeValue(); + var currentValue = graph.options().filterMenu().getDegreeSliderValue(); + if ( parseInt(defOntValue) === parseInt(currentValue) ) { + currObj.doc = -1; + } else { + currObj.doc = currentValue; + } + + currObj.cd = graph.options().classDistance(); + currObj.dd = graph.options().datatypeDistance(); + if ( graph.editorMode() === true ) { + currObj.editorMode = "true"; + } else { + currObj.editorMode = "false"; + } + currObj.filter_datatypes = String(graph.options().filterMenu().getCheckBoxValue("datatypeFilterCheckbox")); + currObj.filter_sco = String(graph.options().filterMenu().getCheckBoxValue("subclassFilterCheckbox")); + currObj.filter_disjoint = String(graph.options().filterMenu().getCheckBoxValue("disjointFilterCheckbox")); + currObj.filter_setOperator = String(graph.options().filterMenu().getCheckBoxValue("setoperatorFilterCheckbox")); + currObj.filter_objectProperties = String(graph.options().filterMenu().getCheckBoxValue("objectPropertyFilterCheckbox")); + currObj.mode_dynamic = String(graph.options().dynamicLabelWidth()); + currObj.mode_scaling = String(graph.options().modeMenu().getCheckBoxValue("nodescalingModuleCheckbox")); + currObj.mode_compact = String(graph.options().modeMenu().getCheckBoxValue("compactnotationModuleCheckbox")); + currObj.mode_colorExt = String(graph.options().modeMenu().getCheckBoxValue("colorexternalsModuleCheckbox")); + currObj.mode_multiColor = String(graph.options().modeMenu().colorModeState()); + currObj.mode_pnp = String(graph.options().modeMenu().getCheckBoxValue("pickandpinModuleCheckbox")); + currObj.debugFeatures = String(!graph.options().getHideDebugFeatures()); + currObj.rect = 0; + + var defObj = graph.options().initialConfig(); + var optsString = prepareOptionString(defObj, currObj); + var urlString = String(location); + var htmlElement; + // when everything is default then there is nothing to write + if ( optsString.length === 0 ) { + // building up parameter list; + + // remove the all options form location + var hashCode = location.hash; + urlString = urlString.split(hashCode)[0]; + + var lPos = hashCode.lastIndexOf("#"); + if ( lPos === -1 ) { + htmlElement = d3.select("#exportedUrl").node(); + htmlElement.value = String(location); + htmlElement.title = String(location); + return; // nothing to change in the location String + } + var newURL = hashCode.slice(lPos, hashCode.length); + htmlElement = d3.select("#exportedUrl").node(); + htmlElement.value = urlString + newURL; + htmlElement.title = urlString + newURL; + return; + } + + // generate the options string; + var numParameters = (urlString.match(/#/g) || []).length; + var newUrlString; + if ( numParameters === undefined || numParameters === 0 ) { + newUrlString = urlString + "#" + optsString; + } + if ( numParameters > 0 ) { + var tokens = urlString.split("#"); + var i; + if ( tokens[1].indexOf("opts=") >= 0 ) { + tokens[1] = optsString; + newUrlString = tokens[0]; + } else { + newUrlString = tokens[0] + "#"; + newUrlString += optsString; + } + // append parameters + for ( i = 1; i < tokens.length; i++ ) { + if ( tokens[i].length > 0 ) { + newUrlString += "#" + tokens[i]; + } + } + } + // building up parameter list; + htmlElement = d3.select("#exportedUrl").node(); + htmlElement.value = newUrlString; + htmlElement.title = newUrlString; + + }; + + function exportSvg(){ + graph.options().navigationMenu().hideAllMenus(); + // Get the d3js SVG element + var graphSvg = d3.select(graph.options().graphContainerSelector()).select("svg"), + graphSvgCode, + escapedGraphSvgCode, + dataURI; + + // inline the styles, so that the exported svg code contains the css rules + inlineVowlStyles(); + hideNonExportableElements(); + + graphSvgCode = graphSvg.attr("version", 1.1) + .attr("xmlns", "http://www.w3.org/2000/svg") + .node().parentNode.innerHTML; + + // Insert the reference to VOWL + graphSvgCode = "\n" + graphSvgCode; + + escapedGraphSvgCode = escapeUnicodeCharacters(graphSvgCode); + //btoa(); Creates a base-64 encoded ASCII string from a "string" of binary data. + dataURI = "data:image/svg+xml;base64," + btoa(escapedGraphSvgCode); + + + exportSvgButton.attr("href", dataURI) + .attr("download", exportFilename + ".svg"); + + // remove graphic styles for interaction to go back to normal + removeVowlInlineStyles(); + showNonExportableElements(); + graph.lazyRefresh(); + } + + function escapeUnicodeCharacters( text ){ + var textSnippets = [], + i, textLength = text.length, + character, + charCode; + + for ( i = 0; i < textLength; i++ ) { + character = text.charAt(i); + charCode = character.charCodeAt(0); + + if ( charCode < 128 ) { + textSnippets.push(character); + } else { + textSnippets.push("&#" + charCode + ";"); + } + } + + return textSnippets.join(""); + } + + function inlineVowlStyles(){ + setStyleSensitively(".text", [{ name: "font-family", value: "Helvetica, Arial, sans-serif" }, { + name: "font-size", + value: "12px" + }]); + setStyleSensitively(".subtext", [{ name: "font-size", value: "9px" }]); + setStyleSensitively(".text.instance-count", [{ name: "fill", value: "#666" }]); + setStyleSensitively(".external + text .instance-count", [{ name: "fill", value: "#aaa" }]); + setStyleSensitively(".cardinality", [{ name: "font-size", value: "10px" }]); + setStyleSensitively(".text, .embedded", [{ name: "pointer-events", value: "none" }]); + setStyleSensitively(".class, .object, .disjoint, .objectproperty, .disjointwith, .equivalentproperty, .transitiveproperty, .functionalproperty, .inversefunctionalproperty, .symmetricproperty, .allvaluesfromproperty, .somevaluesfromproperty", [{ + name: "fill", + value: "#acf" + }]); + setStyleSensitively(".label .datatype, .datatypeproperty", [{ name: "fill", value: "#9c6" }]); + setStyleSensitively(".rdf, .rdfproperty", [{ name: "fill", value: "#c9c" }]); + setStyleSensitively(".literal, .node .datatype", [{ name: "fill", value: "#fc3" }]); + setStyleSensitively(".deprecated, .deprecatedproperty", [{ name: "fill", value: "#ccc" }]); + setStyleSensitively(".external, .externalproperty", [{ name: "fill", value: "#36c" }]); + setStyleSensitively("path, .nofill", [{ name: "fill", value: "none" }]); + setStyleSensitively("marker path", [{ name: "fill", value: "#000" }]); + setStyleSensitively(".class, path, line, .fineline", [{ name: "stroke", value: "#000" }]); + setStyleSensitively(".white, .subclass, .subclassproperty, .external + text", [{ name: "fill", value: "#fff" }]); + setStyleSensitively(".class.hovered, .property.hovered, .cardinality.hovered, .cardinality.focused, circle.pin, .filled.hovered, .filled.focused", [{ + name: "fill", + value: "#f00" + }, { name: "cursor", value: "pointer" }]); + setStyleSensitively(".focused, path.hovered", [{ name: "stroke", value: "#f00" }]); + setStyleSensitively(".indirect-highlighting, .feature:hover", [{ name: "fill", value: "#f90" }]); + setStyleSensitively(".values-from", [{ name: "stroke", value: "#69c" }]); + setStyleSensitively(".symbol, .values-from.filled", [{ name: "fill", value: "#69c" }]); + setStyleSensitively(".class, path, line", [{ name: "stroke-width", value: "2" }]); + setStyleSensitively(".fineline", [{ name: "stroke-width", value: "1" }]); + setStyleSensitively(".dashed, .anonymous", [{ name: "stroke-dasharray", value: "8" }]); + setStyleSensitively(".dotted", [{ name: "stroke-dasharray", value: "3" }]); + setStyleSensitively("rect.focused, circle.focused", [{ name: "stroke-width", value: "4px" }]); + setStyleSensitively(".nostroke", [{ name: "stroke", value: "none" }]); + setStyleSensitively("marker path", [{ name: "stroke-dasharray", value: "100" }]); + } + + function setStyleSensitively( selector, styles ){ + var elements = d3.selectAll(selector); + if ( elements.empty() ) { + return; + } + + styles.forEach(function ( style ){ + elements.each(function (){ + var element = d3.select(this); + if ( !shouldntChangeInlineCss(element, style.name) ) { + element.style(style.name, style.value); + } + }); + }); + } + + function shouldntChangeInlineCss( element, style ){ + return style === "fill" && hasBackgroundColorSet(element); + } + + function hasBackgroundColorSet( element ){ + var data = element.datum(); + if ( data === undefined ) { + return false; + } + return data.backgroundColor && !!data.backgroundColor(); + } + + /** + * For example the pin of the pick&pin module should be invisible in the exported graphic. + */ + function hideNonExportableElements(){ + d3.selectAll(".hidden-in-export").style("display", "none"); + } + + function removeVowlInlineStyles(){ + d3.selectAll(".text, .subtext, .text.instance-count, .external + text .instance-count, .cardinality, .text, .embedded, .class, .object, .disjoint, .objectproperty, .disjointwith, .equivalentproperty, .transitiveproperty, .functionalproperty, .inversefunctionalproperty, .symmetricproperty, .allvaluesfromproperty, .somevaluesfromproperty, .label .datatype, .datatypeproperty, .rdf, .rdfproperty, .literal, .node .datatype, .deprecated, .deprecatedproperty, .external, .externalproperty, path, .nofill, .symbol, .values-from.filled, marker path, .class, path, line, .fineline, .white, .subclass, .subclassproperty, .external + text, .class.hovered, .property.hovered, .cardinality.hovered, .cardinality.focused, circle.pin, .filled.hovered, .filled.focused, .focused, path.hovered, .indirect-highlighting, .feature:hover, .values-from, .class, path, line, .fineline, .dashed, .anonymous, .dotted, rect.focused, circle.focused, .nostroke, marker path") + .each(function (){ + var element = d3.select(this); + + var inlineStyles = element.node().style; + for ( var styleName in inlineStyles ) { + if ( inlineStyles.hasOwnProperty(styleName) ) { + if ( shouldntChangeInlineCss(element, styleName) ) { + continue; + } + element.style(styleName, null); + } + } + + if ( element.datum && element.datum() !== undefined && element.datum().type ) { + if ( element.datum().type() === "rdfs:subClassOf" ) { + element.style("fill", null); + } + } + }); + + // repair svg icons in the menu; + var scrollContainer = d3.select("#menuElementContainer").node(); + var controlElements = scrollContainer.children; + var numEntries = controlElements.length; + + for ( var i = 0; i < numEntries; i++ ) { + var currentMenu = controlElements[i].id; + d3.select("#" + currentMenu).select("path").style("stroke-width", "0"); + d3.select("#" + currentMenu).select("path").style("fill", "#fff"); + } + + d3.select("#magnifyingGlass").style("stroke-width", "0"); + d3.select("#magnifyingGlass").style("fill", "#666"); + + } + + function showNonExportableElements(){ + d3.selectAll(".hidden-in-export").style("display", null); + } + + exportMenu.createJSON_exportObject = function (){ + var i, j, k; // an index variable for the for-loops + + /** get data for exporter **/ + if (!graph.options().data()) {return {};} // return an empty json object + // extract onotology information; + var unfilteredData = graph.getUnfilteredData(); + var ontologyComment = graph.options().data()._comment; + var metaObj = graph.options().getGeneralMetaObject(); + var header = graph.options().data().header; + + if ( metaObj.iri && metaObj.iri !== header.iri ) { + header.iri = metaObj.iri; + } + if ( metaObj.title && metaObj.title !== header.title ) { + header.title = metaObj.title; + } + if ( metaObj.version && metaObj.version !== header.version ) { + header.version = metaObj.version; + } + if ( metaObj.author && metaObj.author !== header.author ) { + header.author = metaObj.author; + } + if ( metaObj.description && metaObj.description !== header.description ) { + header.description = metaObj.description; + } + + + var exportText = {}; + exportText._comment = ontologyComment; + exportText.header = header; + exportText.namespace = graph.options().data().namespace; + if ( exportText.namespace === undefined ) { + exportText.namespace = []; // just an empty namespace array + } + // we do have now the unfiltered data which needs to be transfered to class/classAttribute and property/propertyAttribute + + + // var classAttributeString='classAttribute:[ \n'; + var nodes = unfilteredData.nodes; + var nLen = nodes.length; // hope for compiler unroll + var classObjects = []; + var classAttributeObjects = []; + for ( i = 0; i < nLen; i++ ) { + var classObj = {}; + var classAttr = {}; + classObj.id = nodes[i].id(); + classObj.type = nodes[i].type(); + classObjects.push(classObj); + + // define the attributes object + classAttr.id = nodes[i].id(); + classAttr.iri = nodes[i].iri(); + classAttr.baseIri = nodes[i].baseIri(); + classAttr.label = nodes[i].label(); + + if ( nodes[i].attributes().length > 0 ) { + classAttr.attributes = nodes[i].attributes(); + } + if ( nodes[i].comment() ) { + classAttr.comment = nodes[i].comment(); + } + if ( nodes[i].annotations() ) { + classAttr.annotations = nodes[i].annotations(); + } + if ( nodes[i].description() ) { + classAttr.description = nodes[i].description(); + } + + + if ( nodes[i].individuals().length > 0 ) { + var classIndividualElements = []; + var nIndividuals = nodes[i].individuals(); + for ( j = 0; j < nIndividuals.length; j++ ) { + var indObj = {}; + indObj.iri = nIndividuals[j].iri(); + indObj.baseIri = nIndividuals[j].baseIri(); + indObj.labels = nIndividuals[j].label(); + if ( nIndividuals[j].annotations() ) { + indObj.annotations = nIndividuals[j].annotations(); + } + if ( nIndividuals[j].description() ) { + indObj.description = nIndividuals[j].description(); + } + if ( nIndividuals[j].comment() ) { + indObj.comment = nIndividuals[j].comment(); + } + classIndividualElements.push(indObj); + } + classAttr.individuals = classIndividualElements; + } + + var equalsForAttributes = undefined; + if ( nodes[i].equivalents().length > 0 ) { + equalsForAttributes = []; + var equals = nodes[i].equivalents(); + for ( j = 0; j < equals.length; j++ ) { + var eqObj = {}; + var eqAttr = {}; + eqObj.id = equals[j].id(); + equalsForAttributes.push(equals[j].id()); + eqObj.type = equals[j].type(); + classObjects.push(eqObj); + + eqAttr.id = equals[j].id(); + eqAttr.iri = equals[j].iri(); + eqAttr.baseIri = equals[j].baseIri(); + eqAttr.label = equals[j].label(); + + if ( equals[j].attributes().length > 0 ) { + eqAttr.attributes = equals[j].attributes(); + } + if ( equals[j].comment() ) { + eqAttr.comment = equals[j].comment(); + } + if ( equals[j].individuals().length > 0 ) { + eqAttr.individuals = equals[j].individuals(); + } + if ( equals[j].annotations() ) { + eqAttr.annotations = equals[j].annotations(); + } + if ( equals[j].description() ) { + eqAttr.description = equals[j].description(); + } + + if ( equals[j].individuals().length > 0 ) { + var e_classIndividualElements = []; + var e_nIndividuals = equals[i].individuals(); + for ( k = 0; k < e_nIndividuals.length; k++ ) { + var e_indObj = {}; + e_indObj.iri = e_nIndividuals[k].iri(); + e_indObj.baseIri = e_nIndividuals[k].baseIri(); + e_indObj.labels = e_nIndividuals[k].label(); + + if ( e_nIndividuals[k].annotations() ) { + e_indObj.annotations = e_nIndividuals[k].annotations(); + } + if ( e_nIndividuals[k].description() ) { + e_indObj.description = e_nIndividuals[k].description(); + } + if ( e_nIndividuals[k].comment() ) { + e_indObj.comment = e_nIndividuals[k].comment(); + } + e_classIndividualElements.push(e_indObj); + } + eqAttr.individuals = e_classIndividualElements; + } + + classAttributeObjects.push(eqAttr); + } + } + if ( equalsForAttributes && equalsForAttributes.length > 0 ) { + classAttr.equivalent = equalsForAttributes; + } + + // classAttr.subClasses=nodes[i].subClasses(); // not needed + // classAttr.instances=nodes[i].instances(); + + // + // .complement(element.complement) + // .disjointUnion(element.disjointUnion) + // .description(element.description) + // .equivalents(element.equivalent) + // .intersection(element.intersection) + // .type(element.type) Ignore, because we predefined it + // .union(element.union) + classAttributeObjects.push(classAttr); + } + + /** -- properties -- **/ + var properties = unfilteredData.properties; + var pLen = properties.length; // hope for compiler unroll + var propertyObjects = []; + var propertyAttributeObjects = []; + + for ( i = 0; i < pLen; i++ ) { + var pObj = {}; + var pAttr = {}; + pObj.id = properties[i].id(); + pObj.type = properties[i].type(); + propertyObjects.push(pObj); + + // // define the attributes object + pAttr.id = properties[i].id(); + pAttr.iri = properties[i].iri(); + pAttr.baseIri = properties[i].baseIri(); + pAttr.label = properties[i].label(); + + if ( properties[i].attributes().length > 0 ) { + pAttr.attributes = properties[i].attributes(); + } + if ( properties[i].comment() ) { + pAttr.comment = properties[i].comment(); + } + + if ( properties[i].annotations() ) { + pAttr.annotations = properties[i].annotations(); + } + if ( properties[i].maxCardinality() ) { + pAttr.maxCardinality = properties[i].maxCardinality(); + } + if ( properties[i].minCardinality() ) { + pAttr.minCardinality = properties[i].minCardinality(); + } + if ( properties[i].cardinality() ) { + pAttr.cardinality = properties[i].cardinality(); + } + if ( properties[i].description() ) { + pAttr.description = properties[i].description(); + } + + pAttr.domain = properties[i].domain().id(); + pAttr.range = properties[i].range().id(); + // sub properties; + if ( properties[i].subproperties() ) { + var subProps = properties[i].subproperties(); + var subPropsIdArray = []; + for ( j = 0; j < subProps.length; j++ ) { + if ( subProps[j].id ) + subPropsIdArray.push(subProps[j].id()); + } + pAttr.subproperty = subPropsIdArray; + } + + // super properties + if ( properties[i].superproperties() ) { + var superProps = properties[i].superproperties(); + var superPropsIdArray = []; + for ( j = 0; j < superProps.length; j++ ) { + if ( superProps[j].id ) + superPropsIdArray.push(superProps[j].id()); + } + pAttr.superproperty = superPropsIdArray; + } + + // check for inverse element + if ( properties[i].inverse() ) { + if ( properties[i].inverse().id ) + pAttr.inverse = properties[i].inverse().id(); + } + propertyAttributeObjects.push(pAttr); + } + + exportText.class = classObjects; + exportText.classAttribute = classAttributeObjects; + exportText.property = propertyObjects; + exportText.propertyAttribute = propertyAttributeObjects; + + + var nodeElements = graph.graphNodeElements(); // get visible nodes + var propElements = graph.graphLabelElements(); // get visible labels + // var jsonObj = JSON.parse(exportableJsonText); // reparse the original input json + + /** modify comment **/ + var comment = exportText._comment; + var additionalString = " [Additional Information added by WebVOWL Exporter Version: " + "1.1.7" + "]"; + // adding new string to comment only if it does not exist + if ( comment.indexOf(additionalString) === -1 ) { + exportText._comment = comment + " [Additional Information added by WebVOWL Exporter Version: " + "1.1.7" + "]"; + } + + var classAttribute = exportText.classAttribute; + var propAttribute = exportText.propertyAttribute; + /** remove previously stored variables **/ + for ( i = 0; i < classAttribute.length; i++ ) { + var classObj_del = classAttribute[i]; + delete classObj_del.pos; + delete classObj_del.pinned; + } + var propertyObj; + for ( i = 0; i < propAttribute.length; i++ ) { + propertyObj = propAttribute[i]; + delete propertyObj.pos; + delete propertyObj.pinned; + } + /** add new variables to jsonObj **/ + // class attribute variables + nodeElements.each(function ( node ){ + var nodeId = node.id(); + for ( i = 0; i < classAttribute.length; i++ ) { + var classObj = classAttribute[i]; + if ( classObj.id === nodeId ) { + // store relative positions + classObj.pos = [parseFloat(node.x.toFixed(2)), parseFloat(node.y.toFixed(2))]; + if ( node.pinned() ) + classObj.pinned = true; + break; + } + } + }); + // property attribute variables + for ( j = 0; j < propElements.length; j++ ) { + var correspondingProp = propElements[j].property(); + for ( i = 0; i < propAttribute.length; i++ ) { + propertyObj = propAttribute[i]; + if ( propertyObj.id === correspondingProp.id() ) { + propertyObj.pos = [parseFloat(propElements[j].x.toFixed(2)), parseFloat(propElements[j].y.toFixed(2))]; + if ( propElements[j].pinned() ) + propertyObj.pinned = true; + break; + } + } + } + /** create the variable for settings and set their values **/ + exportText.settings = {}; + + // Global Settings + var zoom = graph.scaleFactor(); + var paused = graph.paused(); + var translation = [parseFloat(graph.translation()[0].toFixed(2)), parseFloat(graph.translation()[1].toFixed(2))]; + exportText.settings.global = {}; + exportText.settings.global.zoom = zoom.toFixed(2); + exportText.settings.global.translation = translation; + exportText.settings.global.paused = paused; + + // shared variable declaration + var cb_text; + var isEnabled; + var cb_obj; + + // Gravity Settings + var classDistance = graph.options().classDistance(); + var datatypeDistance = graph.options().datatypeDistance(); + exportText.settings.gravity = {}; + exportText.settings.gravity.classDistance = classDistance; + exportText.settings.gravity.datatypeDistance = datatypeDistance; + + // Filter Settings + var fMenu = graph.options().filterMenu(); + var fContainer = fMenu.getCheckBoxContainer(); + var cbCont = []; + for ( i = 0; i < fContainer.length; i++ ) { + cb_text = fContainer[i].checkbox.attr("id"); + isEnabled = fContainer[i].checkbox.property("checked"); + cb_obj = {}; + cb_obj.id = cb_text; + cb_obj.checked = isEnabled; + cbCont.push(cb_obj); + } + var degreeSliderVal = fMenu.getDegreeSliderValue(); + exportText.settings.filter = {}; + exportText.settings.filter.checkBox = cbCont; + exportText.settings.filter.degreeSliderValue = degreeSliderVal; + + // Modes Settings + var mMenu = graph.options().modeMenu(); + var mContainer = mMenu.getCheckBoxContainer(); + var cb_modes = []; + for ( i = 0; i < mContainer.length; i++ ) { + cb_text = mContainer[i].attr("id"); + isEnabled = mContainer[i].property("checked"); + cb_obj = {}; + cb_obj.id = cb_text; + cb_obj.checked = isEnabled; + cb_modes.push(cb_obj); + } + var colorSwitchState = mMenu.colorModeState(); + exportText.settings.modes = {}; + exportText.settings.modes.checkBox = cb_modes; + exportText.settings.modes.colorSwitchState = colorSwitchState; + + var exportObj = {}; + // todo: [ ] find better way for ordering the objects + // hack for ordering of objects, so settings is after metrics + exportObj._comment = exportText._comment; + exportObj.header = exportText.header; + exportObj.namespace = exportText.namespace; + exportObj.metrics = exportText.metrics; + exportObj.settings = exportText.settings; + exportObj.class = exportText.class; + exportObj.classAttribute = exportText.classAttribute; + exportObj.property = exportText.property; + exportObj.propertyAttribute = exportText.propertyAttribute; + + return exportObj; + }; + + function exportJson(){ + graph.options().navigationMenu().hideAllMenus(); + /** check if there is data **/ + if ( !exportableJsonText ) { + alert("No graph data available."); + // Stop the redirection to the path of the href attribute + d3.event.preventDefault(); + return; + } + + var exportObj = exportMenu.createJSON_exportObject(); + + // make a string again; + var exportText = JSON.stringify(exportObj, null, ' '); + // write the data + var dataURI = "data:text/json;charset=utf-8," + encodeURIComponent(exportText); + var jsonExportFileName = exportFilename; + + if ( !jsonExportFileName.endsWith(".json") ) + jsonExportFileName += ".json"; + exportJsonButton.attr("href", dataURI) + .attr("download", jsonExportFileName); + } + + var curveFunction = d3.svg.line() + .x(function ( d ){ + return d.x; + }) + .y(function ( d ){ + return d.y; + }) + .interpolate("cardinal"); + var loopFunction = d3.svg.line() + .x(function ( d ){ + return d.x; + }) + .y(function ( d ){ + return d.y; + }) + .interpolate("cardinal") + .tension(-1); + + function exportTex(){ + var zoom = graph.scaleFactor(); + var grTranslate = graph.translation(); + var bbox = graph.getBoundingBoxForTex(); + var comment = " %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n"; + comment += " % Generated with the experimental alpha version of the TeX exporter of WebVOWL (version 1.1.3) %%% \n"; + comment += " %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n\n"; + comment += " % The content can be used as import in other TeX documents. \n"; + comment += " % Parent document has to use the following packages \n"; + comment += " % \\usepackage{tikz} \n"; + comment += " % \\usepackage{helvet} \n"; + comment += " % \\usetikzlibrary{decorations.markings,decorations.shapes,decorations,arrows,automata,backgrounds,petri,shapes.geometric} \n"; + comment += " % \\usepackage{xcolor} \n\n"; + comment += " %%%%%%%%%%%%%%% Example Parent Document %%%%%%%%%%%%%%%%%%%%%%%\n"; + comment += " %\\documentclass{article} \n"; + comment += " %\\usepackage{tikz} \n"; + comment += " %\\usepackage{helvet} \n"; + comment += " %\\usetikzlibrary{decorations.markings,decorations.shapes,decorations,arrows,automata,backgrounds,petri,shapes.geometric} \n"; + comment += " %\\usepackage{xcolor} \n\n"; + comment += " %\\begin{document} \n"; + comment += " %\\section{Example} \n"; + comment += " % This is an example. \n"; + comment += " % \\begin{figure} \n"; + comment += " % \\input{} % << tex file name for the graph \n"; + comment += " % \\caption{A generated graph with TKIZ using alpha version of the TeX exporter of WebVOWL (version 1.1.3) } \n"; + comment += " % \\end{figure} \n"; + comment += " %\\end{document} \n"; + comment += " %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n\n"; + + + var texString = comment + "\\definecolor{imageBGCOLOR}{HTML}{FFFFFF} \n" + + "\\definecolor{owlClassColor}{HTML}{AACCFF}\n" + + "\\definecolor{owlObjectPropertyColor}{HTML}{AACCFF}\n" + + "\\definecolor{owlExternalClassColor}{HTML}{AACCFF}\n" + + "\\definecolor{owlDatatypePropertyColor}{HTML}{99CC66}\n" + + "\\definecolor{owlDatatypeColor}{HTML}{FFCC33}\n" + + "\\definecolor{owlThingColor}{HTML}{FFFFFF}\n" + + "\\definecolor{valuesFrom}{HTML}{6699CC}\n" + + "\\definecolor{rdfPropertyColor}{HTML}{CC99CC}\n" + + "\\definecolor{unionColor}{HTML}{6699cc}\n" + + "\\begin{center} \n" + + "\\resizebox{\\linewidth}{!}{\n" + + + "\\begin{tikzpicture}[framed]\n" + + "\\clip (" + bbox[0] + "pt , " + bbox[1] + "pt ) rectangle (" + bbox[2] + "pt , " + bbox[3] + "pt);\n" + + "\\tikzstyle{dashed}=[dash pattern=on 4pt off 4pt] \n" + + "\\tikzstyle{dotted}=[dash pattern=on 2pt off 2pt] \n" + + "\\fontfamily{sans-serif}{\\fontsize{12}{12}\\selectfont}\n \n"; + + + texString += "\\tikzset{triangleBlack/.style = {fill=black, draw=black, line width=1pt,scale=0.7,regular polygon, regular polygon sides=3} }\n"; + texString += "\\tikzset{triangleWhite/.style = {fill=white, draw=black, line width=1pt,scale=0.7,regular polygon, regular polygon sides=3} }\n"; + texString += "\\tikzset{triangleBlue/.style = {fill=valuesFrom, draw=valuesFrom, line width=1pt,scale=0.7,regular polygon, regular polygon sides=3} }\n"; + + texString += "\\tikzset{Diamond/.style = {fill=white, draw=black, line width=2pt,scale=1.2,regular polygon, regular polygon sides=4} }\n"; + + + texString += "\\tikzset{Literal/.style={rectangle,align=center,\n" + + "font={\\fontsize{12pt}{12}\\selectfont \\sffamily },\n" + + "black, draw=black, dashed, line width=1pt, fill=owlDatatypeColor, minimum width=80pt,\n" + + "minimum height = 20pt}}\n\n"; + + texString += "\\tikzset{Datatype/.style={rectangle,align=center,\n" + + "font={\\fontsize{12pt}{12}\\selectfont \\sffamily },\n" + + "black, draw=black, line width=1pt, fill=owlDatatypeColor, minimum width=80pt,\n" + + "minimum height = 20pt}}\n\n"; + + + texString += "\\tikzset{owlClass/.style={circle, inner sep=0mm,align=center, \n" + + "font={\\fontsize{12pt}{12}\\selectfont \\sffamily },\n" + + "black, draw=black, line width=1pt, fill=owlClassColor, minimum size=101pt}}\n\n"; + + texString += "\\tikzset{anonymousClass/.style={circle, inner sep=0mm,align=center, \n" + + "font={\\fontsize{12pt}{12}\\selectfont \\sffamily },\n" + + "black, dashed, draw=black, line width=1pt, fill=owlClassColor, minimum size=101pt}}\n\n"; + + + texString += "\\tikzset{owlThing/.style={circle, inner sep=0mm,align=center,\n" + + "font={\\fontsize{12pt}{12}\\selectfont \\sffamily },\n" + + "black, dashed, draw=black, line width=1pt, fill=owlThingColor, minimum size=62pt}}\n\n"; + + + texString += "\\tikzset{owlObjectProperty/.style={rectangle,align=center,\n" + + "inner sep=0mm,\n" + + "font={\\fontsize{12pt}{12}\\selectfont \\sffamily },\n" + + "fill=owlObjectPropertyColor, minimum width=80pt,\n" + + "minimum height = 25pt}}\n\n"; + + texString += "\\tikzset{rdfProperty/.style={rectangle,align=center,\n" + + "inner sep=0mm,\n" + + "font={\\fontsize{12pt}{12}\\selectfont \\sffamily },\n" + + "fill=rdfPropertyColor, minimum width=80pt,\n" + + "minimum height = 25pt}}\n\n"; + + + texString += "\\tikzset{owlDatatypeProperty/.style={rectangle,align=center,\n" + + "fill=owlDatatypePropertyColor, minimum width=80pt,\n" + + "inner sep=0mm,\n" + + "font={\\fontsize{12pt}{12}\\selectfont \\sffamily },\n" + + "minimum height = 25pt}}\n\n"; + + texString += "\\tikzset{rdfsSubClassOf/.style={rectangle,align=center,\n" + + "font={\\fontsize{12pt}{12}\\selectfont \\sffamily },\n" + + "inner sep=0mm,\n" + + "fill=imageBGCOLOR, minimum width=80pt,\n" + + "minimum height = 25pt}}\n\n"; + + texString += "\\tikzset{unionOf/.style={circle, inner sep=0mm,align=center,\n" + + "font={\\fontsize{12pt}{12}\\selectfont \\sffamily },\n" + + "black, draw=black, line width=1pt, fill=unionColor, minimum size=25pt}}\n\n"; + + texString += "\\tikzset{disjointWith/.style={circle, inner sep=0mm,align=center,\n" + + "font={\\fontsize{12pt}{12}\\selectfont \\sffamily },\n" + + "black, draw=black, line width=1pt, fill=unionColor, minimum size=20pt}}\n\n"; + + + texString += "\\tikzset{owlEquivalentClass/.style={circle,align=center,\n" + + "font={\\fontsize{12pt}{12}\\selectfont \\sffamily },\n" + + "inner sep=0mm,\n" + + "black, solid, draw=black, line width=3pt, fill=owlExternalClassColor, minimum size=101pt,\n" + + "postaction = {draw,line width=1pt, white}}}\n\n"; + + // draw a bounding box; + + // get bbox coordinates; + + + graph.options().navigationMenu().hideAllMenus(); + /** check if there is data **/ + if ( !exportableJsonText ) { + alert("No graph data available."); + // Stop the redirection to the path of the href attribute + d3.event.preventDefault(); + return; + } + + var i = 0, identifier; + + /** get data for exporter **/ + var nodeElements = graph.graphNodeElements(); // get visible nodes + var propElements = graph.graphLabelElements(); // get visible labels + var links = graph.graphLinkElements(); + + // export only nodes; + // draw Links; + for ( i = 0; i < links.length; i++ ) { + var link = links[i]; + // console.log("\n****************\nInverstigating Link for property "+link.property().labelForCurrentLanguage()); + + var prop = link.property(); + var dx, dy, px, py, rx, ry; + var colorStr = "black"; + var linkDomainIntersection; + var linkRangeIntersection; + var center; + var linkStyle = ""; + var isLoop = ""; + var curvePoint; + var pathStart; + var pathEnd; + var controlPoints; + var len; + var ahAngle; + var pathLen; + var markerOffset = 7; + + var arrowType = "triangleBlack"; + var linkWidth = ",line width=2pt"; + if ( prop.linkType ) { + if ( prop.linkType() === "dotted" ) { + //stroke-dasharray: 3; + linkStyle = ", dotted "; + arrowType = "triangleWhite"; + } + if ( prop.linkType() === "dashed" ) { + //stroke-dasharray: 3; + linkStyle = ", dashed "; + } + + if ( prop.linkType() === "values-from" ) { + colorStr = "valuesFrom"; + } + + } + + var startX, startY, endX, endY, normX, normY, lg; + + if ( link.layers().length === 1 && !link.loops() ) { + + linkDomainIntersection = graph.math().calculateIntersection(link.range(), link.domain(), 1); + linkRangeIntersection = graph.math().calculateIntersection(link.domain(), link.range(), 1); + center = graph.math().calculateCenter(linkDomainIntersection, linkRangeIntersection); + dx = linkDomainIntersection.x; + dy = -linkDomainIntersection.y; + px = center.x; + py = -center.y; + rx = linkRangeIntersection.x; + ry = -linkRangeIntersection.y; + + + pathStart = linkDomainIntersection; + curvePoint = center; + pathEnd = linkRangeIntersection; + + var nx = rx - px; + var ny = ry - py; + + // normalize ; + len = Math.sqrt(nx * nx + ny * ny); + + nx = nx / len; + ny = ny / len; + + ahAngle = Math.atan2(ny, nx) * (180 / Math.PI); + normX = nx; + normY = ny; + } + else { + if ( link.isLoop() ) { + isLoop = ", tension=3"; + controlPoints = graph.math().calculateLoopPoints(link); + pathStart = controlPoints[0]; + curvePoint = controlPoints[1]; + pathEnd = controlPoints[2]; + } else { + curvePoint = link.label(); + pathStart = graph.math().calculateIntersection(curvePoint, link.domain(), 1); + pathEnd = graph.math().calculateIntersection(curvePoint, link.range(), 1); + } + dx = pathStart.x; + dy = -pathStart.y; + px = curvePoint.x; + py = -curvePoint.y; + rx = pathEnd.x; + ry = -pathEnd.y; + } + + texString += "\\draw [" + colorStr + linkStyle + linkWidth + isLoop + "] plot [smooth] coordinates {(" + + dx + "pt, " + dy + "pt) (" + px + "pt, " + py + "pt) (" + rx + "pt, " + ry + "pt)};\n"; + + + if ( link.property().markerElement() === undefined ) continue; + + // add arrow head; + + + if ( link.property().type() === "owl:someValuesFrom" || link.property().type() === "owl:allValuesFrom" ) { + arrowType = "triangleBlue"; + } + + lg = link.pathObj(); + pathLen = Math.floor(lg.node().getTotalLength()); + var p1 = lg.node().getPointAtLength(pathLen - 4); + var p2 = lg.node().getPointAtLength(pathLen); + var markerCenter = lg.node().getPointAtLength(pathLen - 6); + + if ( link.property().type() === "setOperatorProperty" ) { + p1 = lg.node().getPointAtLength(4); + p2 = lg.node().getPointAtLength(0); + markerCenter = lg.node().getPointAtLength(8); + arrowType = "Diamond"; + } + + startX = p1.x; + startY = p1.y; + endX = p2.x; + endY = p2.y; + normX = endX - startX; + normY = endY - startY; + len = Math.sqrt(normX * normX + normY * normY); + normX = normX / len; + normY = normY / len; + + ahAngle = -1.0 * Math.atan2(normY, normX) * (180 / Math.PI); + ahAngle -= 90; + if ( link.property().type() === "setOperatorProperty" ) { + ahAngle -= 45; + } + // console.log(link.property().labelForCurrentLanguage()+ ": "+normX+ " "+normY +" "+ahAngle); + rx = markerCenter.x; + ry = markerCenter.y; + if ( link.layers().length === 1 && !link.loops() ) { + // markerOffset=-1*m + ry = -1 * ry; + texString += "\\node[" + arrowType + ", rotate=" + ahAngle + "] at (" + rx + "pt, " + ry + "pt) (single_marker" + i + ") {};\n "; + } else { + ry = -1 * ry; + texString += "\\node[" + arrowType + ", rotate=" + ahAngle + "] at (" + rx + "pt, " + ry + "pt) (marker" + i + ") {};\n "; + } + + // if (link.isLoop()){ + // rotAngle=-10+angle * (180 / Math.PI); + // } + + // add cardinality; + var cardinalityText = link.property().generateCardinalityText(); + if ( cardinalityText && cardinalityText.length > 0 ) { + var cardinalityCenter = lg.node().getPointAtLength(pathLen - 18); + var cx = cardinalityCenter.x - (10 * normY); + var cy = cardinalityCenter.y + (10 * normX); // using orthonormal y Coordinate + cy *= -1.0; + var textColor = "black"; + if ( cardinalityText.indexOf("A") > -1 ) { + cardinalityText = "$\\forall$"; + } + if ( cardinalityText.indexOf("E") > -1 ) { + cardinalityText = "$\\exists$"; + } + + + texString += "\\node[font={\\fontsize{12pt}{12}\\selectfont \\sffamily },text=" + textColor + "] at (" + cx + "pt, " + cy + "pt) (cardinalityText" + i + ") {" + cardinalityText + "};\n "; + } + + + if ( link.property().inverse() ) { + lg = link.pathObj(); + pathLen = Math.floor(lg.node().getTotalLength()); + var p1_inv = lg.node().getPointAtLength(4); + var p2_inv = lg.node().getPointAtLength(0); + var markerCenter_inv = lg.node().getPointAtLength(6); + startX = p1_inv.x; + startY = p1_inv.y; + endX = p2_inv.x; + endY = p2_inv.y; + normX = endX - startX; + normY = endY - startY; + len = Math.sqrt(normX * normX + normY * normY); + normX = normX / len; + normY = normY / len; + + ahAngle = -1.0 * Math.atan2(normY, normX) * (180 / Math.PI); + ahAngle -= 90; + // console.log("INV>>\n "+link.property().inverse().labelForCurrentLanguage()+ ": "+normX+ " "+normY +" "+ahAngle); + rx = markerCenter_inv.x; + ry = markerCenter_inv.y; + if ( link.layers().length === 1 && !link.loops() ) { + // markerOffset=-1*m + ry = -1 * ry; + texString += "\\node[" + arrowType + ", rotate=" + ahAngle + "] at (" + rx + "pt, " + ry + "pt) (INV_single_marker" + i + ") {};\n "; + } else { + ry = -1 * ry; + texString += "\\node[" + arrowType + ", rotate=" + ahAngle + "] at (" + rx + "pt, " + ry + "pt) (INV_marker" + i + ") {};\n "; + } + } + + + } + + + nodeElements.each(function ( node ){ + + px = node.x; + py = -node.y; + identifier = node.labelForCurrentLanguage(); + // console.log("Writing : "+ identifier); + if ( identifier === undefined ) identifier = ""; + var qType = "owlClass"; + if ( node.type() === "owl:Thing" || node.type() === "owl:Nothing" ) + qType = "owlThing"; + + if ( node.type() === "owl:equivalentClass" ) { + qType = "owlEquivalentClass"; + } + var textColorStr = ""; + if ( node.textBlock ) { + var txtColor = node.textBlock()._textBlock().style("fill"); + if ( txtColor === "rgb(0, 0, 0)" ) { + textColorStr = ", text=black"; + } + if ( txtColor === "rgb(255, 255, 255)" ) { + textColorStr = ", text=white"; + } + + + var tspans = node.textBlock()._textBlock().node().children; + if ( tspans[0] ) { + identifier = tspans[0].innerHTML; + if ( node.individuals() && node.individuals().length === parseInt(tspans[0].innerHTML) ) { + identifier = "{\\color{gray} " + tspans[0].innerHTML + " }"; + } + for ( var t = 1; t < tspans.length; t++ ) { + if ( node.individuals() && node.individuals().length === parseInt(tspans[t].innerHTML) ) { + identifier += "\\\\ {\\color{gray} " + tspans[t].innerHTML + " }"; + } else { + identifier += "\\\\ {\\small " + tspans[t].innerHTML + " }"; + } + } + } + } + if ( node.type() === "rdfs:Literal" ) { + qType = "Literal"; + } + if ( node.type() === "rdfs:Datatype" ) { + qType = "Datatype"; + } + if ( node.attributes().indexOf("anonymous") !== -1 ) { + qType = "anonymousClass"; + } + + + if ( node.type() === "owl:unionOf" || node.type() === "owl:complementOf" || node.type() === "owl:disjointUnionOf" || node.type() === "owl:intersectionOf" ) + qType = "owlClass"; + + var bgColorStr = ""; + var widthString = ""; + + if ( node.type() === "rdfs:Literal" || node.type() === "rdfs:Datatype" ) { + var width = node.width(); + widthString = ",minimum width=" + width + "pt"; + } + else { + widthString = ",minimum size=" + 2 * node.actualRadius() + "pt"; + + } + if ( node.backgroundColor() ) { + var bgColor = node.backgroundColor(); + bgColor.toUpperCase(); + bgColor = bgColor.slice(1, bgColor.length); + texString += "\\definecolor{Node" + i + "_COLOR}{HTML}{" + bgColor + "} \n "; + bgColorStr = ", fill=Node" + i + "_COLOR "; + } + if ( node.attributes().indexOf("deprecated") > -1 ) { + texString += "\\definecolor{Node" + i + "_COLOR}{HTML}{CCCCCC} \n "; + bgColorStr = ", fill=Node" + i + "_COLOR "; + } + + var leftPos = px - 7; + var rightPos = px + 7; + var txtOffset = py + 20; + if ( node.type() !== "owl:unionOf" || node.type() !== "owl:disjointUnionOf" ) { + texString += "\\node[" + qType + " " + widthString + " " + bgColorStr + " " + textColorStr + "] at (" + px + "pt, " + py + "pt) (Node" + i + ") {" + identifier.replaceAll("_", "\\_ ") + "};\n"; + } + if ( node.type() === "owl:unionOf" ) { + // add symbol to it; + texString += "\\node[" + qType + " " + widthString + " " + bgColorStr + " " + textColorStr + "] at (" + px + "pt, " + py + "pt) (Node" + i + ") {};\n"; + texString += "\\node[unionOf , text=black] at (" + leftPos + "pt, " + py + "pt) (SymbolNode" + i + ") {};\n"; + texString += "\\node[unionOf , text=black] at (" + rightPos + "pt, " + py + "pt) (SymbolNode" + i + ") {};\n"; + texString += "\\node[unionOf ,fill=none , text=black] at (" + leftPos + "pt, " + py + "pt) (SymbolNode" + i + ") {};\n"; + texString += "\\node[text=black] at (" + px + "pt, " + py + "pt) (unionText13) {$\\mathbf{\\cup}$};\n"; + texString += "\\node[font={\\fontsize{12pt}{12}\\selectfont \\sffamily }" + textColorStr + "] at (" + px + "pt, " + txtOffset + "pt) (Node_text" + i + ") {" + identifier.replaceAll("_", "\\_ ") + "};\n"; + } + // OWL DISJOINT UNION OF + if ( node.type() === "owl:disjointUnionOf" ) { + texString += "\\node[" + qType + " " + widthString + " " + bgColorStr + " " + textColorStr + "] at (" + px + "pt, " + py + "pt) (Node" + i + ") {};\n"; + texString += "\\node[unionOf , text=black] at (" + leftPos + "pt, " + py + "pt) (SymbolNode" + i + ") {};\n"; + texString += "\\node[unionOf , text=black] at (" + rightPos + "pt, " + py + "pt) (SymbolNode" + i + ") {};\n"; + texString += "\\node[unionOf ,fill=none , text=black] at (" + leftPos + "pt, " + py + "pt) (SymbolNode" + i + ") {};\n"; + texString += "\\node[font={\\fontsize{12pt}{12}\\selectfont \\sffamily }" + textColorStr + "] at (" + px + "pt, " + py + "pt) (disjointUnoinText" + i + ") {1};\n"; + texString += "\\node[font={\\fontsize{12pt}{12}\\selectfont \\sffamily }" + textColorStr + "] at (" + px + "pt, " + txtOffset + "pt) (Node_text" + i + ") {" + identifier.replaceAll("_", "\\_ ") + "};\n"; + } + // OWL COMPLEMENT OF + if ( node.type() === "owl:complementOf" ) { + // add symbol to it; + texString += "\\node[" + qType + " " + widthString + " " + bgColorStr + " " + textColorStr + "] at (" + px + "pt, " + py + "pt) (Node" + i + ") {};\n"; + texString += "\\node[unionOf , text=black] at (" + px + "pt, " + py + "pt) (SymbolNode" + i + ") {};\n"; + texString += "\\node[font={\\fontsize{18pt}{18}\\selectfont \\sffamily }" + textColorStr + "] at (" + px + "pt, " + py + "pt) (unionText13) {$\\neg$};\n"; + texString += "\\node[font={\\fontsize{12pt}{12}\\selectfont \\sffamily }" + textColorStr + "] at (" + px + "pt, " + txtOffset + "pt) (Node_text" + i + ") {" + identifier.replaceAll("_", "\\_ ") + "};\n"; + } + // OWL INTERSECTION OF + if ( node.type() === "owl:intersectionOf" ) { + texString += "\\node[" + qType + " " + widthString + " " + bgColorStr + " " + textColorStr + "] at (" + px + "pt, " + py + "pt) (Node" + i + ") {};\n"; + texString += "\\node[unionOf , text=black] at (" + leftPos + "pt, " + py + "pt) (SymbolNode" + i + ") {};\n"; + texString += "\\node[unionOf , text=black] at (" + rightPos + "pt, " + py + "pt) (SymbolNode" + i + ") {};\n"; + texString += "\\node[unionOf ,fill=none , text=black] at (" + leftPos + "pt, " + py + "pt) (SymbolNode" + i + ") {};\n"; + + // add now the outer colors; + texString += "\\filldraw[even odd rule,fill=owlClassColor,line width=1pt] (" + leftPos + "pt, " + py + "pt) circle (12.5pt) (" + rightPos + "pt, " + py + "pt) circle (12.5pt);\n "; + + // add texts + texString += "\\node[font={\\fontsize{12pt}{12}\\selectfont \\sffamily }" + textColorStr + "] at (" + px + "pt, " + py + "pt) (intersectionText" + i + ") {$\\cap$};\n"; + texString += "\\node[font={\\fontsize{12pt}{12}\\selectfont \\sffamily }" + textColorStr + "] at (" + px + "pt, " + txtOffset + "pt) (Node_text" + i + ") {" + identifier.replaceAll("_", "\\_ ") + "};\n"; + + } + + + i++; + + }); + for ( i = 0; i < propElements.length; i++ ) { + var correspondingProp = propElements[i].property(); + var p_px = propElements[i].x; + var p_py = -propElements[i].y; + identifier = correspondingProp.labelForCurrentLanguage(); + if ( identifier === undefined ) identifier = ""; + var textColorStr = ""; + if ( correspondingProp.textBlock && correspondingProp.textBlock() ) { + var txtColor = correspondingProp.textBlock()._textBlock().style("fill"); + // console.log("PropertyTextColor="+txtColor); + if ( txtColor === "rgb(0, 0, 0)" ) { + textColorStr = ", text=black"; + } + if ( txtColor === "rgb(255, 255, 255)" ) { + textColorStr = ", text=white"; + } + var tspans = correspondingProp.textBlock()._textBlock().node().children; + + // identifier=node.textBlock()._textBlock().text(); + // console.log(tspans); + if ( tspans[0] ) { + identifier = tspans[0].innerHTML; + + for ( var t = 1; t < tspans.length; t++ ) { + var spanText = tspans[t].innerHTML; + if ( spanText.indexOf("(") > -1 ) { + identifier += "\\\\ {\\small " + tspans[t].innerHTML + " }"; + } + else { + identifier += "\\\\ " + tspans[t].innerHTML; + } + } + } + else { + } + } + if ( correspondingProp.type() === "setOperatorProperty" ) { + continue; // this property does not have a label + } + var qType = "owlObjectProperty"; + if ( correspondingProp.type() === "owl:DatatypeProperty" ) { + qType = "owlDatatypeProperty"; + } + if ( correspondingProp.type() === "rdfs:subClassOf" ) { + qType = "rdfsSubClassOf"; + } + if ( correspondingProp.type() === "rdf:Property" ) { + qType = "rdfProperty"; + } + + + var bgColorStr = ""; + if ( correspondingProp.backgroundColor() ) { + // console.log("Found backGround color"); + var bgColor = correspondingProp.backgroundColor(); + //console.log(bgColor); + bgColor.toUpperCase(); + bgColor = bgColor.slice(1, bgColor.length); + texString += "\\definecolor{property" + i + "_COLOR}{HTML}{" + bgColor + "} \n "; + bgColorStr = ", fill=property" + i + "_COLOR "; + } + if ( correspondingProp.attributes().indexOf("deprecated") > -1 ) { + texString += "\\definecolor{property" + i + "_COLOR}{HTML}{CCCCCC} \n "; + bgColorStr = ", fill=property" + i + "_COLOR "; + } + + var widthString = ""; + var width = correspondingProp.textWidth(); + widthString = ",minimum width=" + width + "pt"; + + + // OWL INTERSECTION OF + if ( correspondingProp.type() === "owl:disjointWith" ) { + var leftPos = p_px - 12; + var rightPos = p_px + 12; + var txtOffset = p_py - 20; + texString += "\\node[" + qType + " " + widthString + " " + bgColorStr + " " + textColorStr + "] at (" + p_px + "pt, " + p_py + "pt) (Node" + i + ") {};\n"; + texString += "\\node[disjointWith , text=black] at (" + leftPos + "pt, " + p_py + "pt) (SymbolNode" + i + ") {};\n"; + texString += "\\node[disjointWith , text=black] at (" + rightPos + "pt, " + p_py + "pt) (SymbolNode" + i + ") {};\n"; + texString += "\\node[font={\\fontsize{12pt}{12}\\selectfont \\sffamily }" + textColorStr + "] at (" + p_px + "pt, " + txtOffset + "pt) (Node_text" + i + ") {"; + if ( graph.options().compactNotation() === false ) { + texString += "(disjoint)"; + } + texString += "};\n"; + continue; + } + + + if ( correspondingProp.inverse() ) { + var inv_correspondingProp = correspondingProp.inverse(); + // create the rendering element for the inverse property; + var inv_identifier = inv_correspondingProp.labelForCurrentLanguage(); + if ( inv_identifier === undefined ) inv_identifier = ""; + var inv_textColorStr = ""; + //console.log(inv_correspondingProp); + //console.log(inv_correspondingProp.textBlock()); + + if ( inv_correspondingProp.textBlock && inv_correspondingProp.textBlock() ) { + + var inv_txtColor = inv_correspondingProp.textBlock()._textBlock().style("fill"); + // console.log("PropertyTextColor="+inv_txtColor); + if ( inv_txtColor === "rgb(0, 0, 0)" ) { + inv_textColorStr = ", text=black"; + } + if ( inv_txtColor === "rgb(255, 255, 255)" ) { + inv_textColorStr = ", text=white"; + } + var inv_tspans = inv_correspondingProp.textBlock()._textBlock().node().children; + + // identifier=node.textBlock()._textBlock().text(); + // console.log(inv_tspans); + if ( inv_tspans[0] ) { + inv_identifier = inv_tspans[0].innerHTML; + + for ( var inv_t = 1; inv_t < inv_tspans.length; inv_t++ ) { + var ispanText = inv_tspans[inv_t].innerHTML; + if ( ispanText.indexOf("(") > -1 ) { + inv_identifier += "\\\\ {\\small " + inv_tspans[inv_t].innerHTML + " }"; + } else { + inv_identifier += "\\\\ " + inv_tspans[inv_t].innerHTML; + } + } + } + } + var inv_qType = "owlObjectProperty"; + var inv_bgColorStr = ""; + + if ( inv_correspondingProp.backgroundColor() ) { + // console.log("Found backGround color"); + var inv_bgColor = inv_correspondingProp.backgroundColor(); + // console.log(inv_bgColor); + inv_bgColor.toUpperCase(); + inv_bgColor = inv_bgColor.slice(1, inv_bgColor.length); + texString += "\\definecolor{inv_property" + i + "_COLOR}{HTML}{" + inv_bgColor + "} \n "; + inv_bgColorStr = ", fill=inv_property" + i + "_COLOR "; + } + if ( inv_correspondingProp.attributes().indexOf("deprecated") > -1 ) { + texString += "\\definecolor{inv_property" + i + "_COLOR}{HTML}{CCCCCC} \n "; + inv_bgColorStr = ", fill=inv_property" + i + "_COLOR "; + } + + var inv_widthString = ""; + var inv_width = inv_correspondingProp.textWidth(); + + var pOY1 = p_py - 14; + var pOY2 = p_py + 14; + inv_widthString = ",minimum width=" + inv_width + "pt"; + texString += "% Createing Inverse Property \n"; + texString += "\\node[" + inv_qType + " " + inv_widthString + " " + inv_bgColorStr + " " + inv_textColorStr + "] at (" + p_px + "pt, " + pOY1 + "pt) (property" + i + ") {" + inv_identifier.replaceAll("_", "\\_ ") + "};\n"; + texString += "% " + inv_qType + " vs " + qType + "\n"; + texString += "% " + inv_widthString + " vs " + widthString + "\n"; + texString += "% " + inv_bgColorStr + " vs " + bgColorStr + "\n"; + texString += "% " + inv_textColorStr + " vs " + textColorStr + "\n"; + + texString += "\\node[" + qType + " " + widthString + " " + bgColorStr + " " + textColorStr + "] at (" + p_px + "pt, " + pOY2 + "pt) (property" + i + ") {" + identifier.replaceAll("_", "\\_ ") + "};\n"; + + } else { + texString += "\\node[" + qType + " " + widthString + " " + bgColorStr + " " + textColorStr + "] at (" + p_px + "pt, " + p_py + "pt) (property" + i + ") {" + identifier.replaceAll("_", "\\_ ") + "};\n"; + } + } + + texString += "\\end{tikzpicture}\n}\n \\end{center}\n"; + + // console.log("Tex Output\n"+ texString); + var dataURI = "data:text/json;charset=utf-8," + encodeURIComponent(texString); + exportTexButton.attr("href", dataURI) + .attr("download", exportFilename + ".tex"); + + + } + + function calculateRadian( angle ){ + angle = angle % 360; + if ( angle < 0 ) { + angle = angle + 360; + } + return (Math.PI * angle) / 180; + } + + function calculateAngle( radian ){ + return radian * (180 / Math.PI); + } + + return exportMenu; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), + +/***/ 324: +/***/ (function(module, exports) { + + /** + * Contains the logic for the export button. + * @returns {{}} + */ + module.exports = function ( graph ){ + var exportTTLModule = {}; + var resultingTTLContent = ""; + var currentNodes; + var currentProperties; + var currentAxioms; + var Map_ID2Node = {}; + var Map_ID2Prop = {}; + var prefixModule = webvowl.util.prefixTools(graph); + + exportTTLModule.requestExport = function (){ + prefixModule.updatePrefixModel(); + resultingTTLContent = ""; + currentNodes = graph.getClassDataForTtlExport(); + var i; + for ( i = 0; i < currentNodes.length; i++ ) { + Map_ID2Node[currentNodes[i].id()] = currentNodes[i]; + } + currentProperties = graph.getPropertyDataForTtlExport(); + + for ( i = 0; i < currentProperties.length; i++ ) { + Map_ID2Prop[currentProperties[i].id()] = currentProperties[i]; + } + + + prepareHeader(); + preparePrefixList(); + prepareOntologyDef(); + resultingTTLContent += "#################################################################\r\n\r\n"; + preparePrefixRepresentation(); + var property_success = exportProperties(); + var class_success = exportClasses(); + currentNodes = null; + currentProperties = null; + Map_ID2Node = {}; + Map_ID2Prop = {}; + if ( property_success === false || class_success === false ) + return false; + return true; + + }; + + function preparePrefixRepresentation(){ + var i; + var allNodes = graph.getUnfilteredData().nodes; + var allProps = graph.getUnfilteredData().properties; + for ( i = 0; i < allNodes.length; i++ ) { + var nodeIRI = prefixModule.getPrefixRepresentationForFullURI(allNodes[i].iri()); + if ( prefixModule.validURL(nodeIRI) === true ) + allNodes[i].prefixRepresentation = "<" + nodeIRI + ">"; + else + allNodes[i].prefixRepresentation = nodeIRI; + } + for ( i = 0; i < allProps.length; i++ ) { + var propIRI = prefixModule.getPrefixRepresentationForFullURI(allProps[i].iri()); + if ( prefixModule.validURL(propIRI) === true ) + allProps[i].prefixRepresentation = "<" + propIRI + ">"; + else + allProps[i].prefixRepresentation = propIRI; + } + } + + function exportProperties(){ + if ( currentProperties.length === 0 ) return; // we dont need to write that + resultingTTLContent += "### Property Definitions (Number of Property) " + currentProperties.length + " ###\r\n"; + for ( var i = 0; i < currentProperties.length; i++ ) { + + resultingTTLContent += "# --------------------------- Property " + i + "------------------------- \r\n"; + var addedElement = extractPropertyDescription(currentProperties[i]); + resultingTTLContent += addedElement; + //@ workaround for not supported elements + if ( addedElement.indexOf("WHYEMPTYNAME") !== -1 ) { + return false; + } + } + return true; + } + + + function exportClasses(){ + if ( currentNodes.length === 0 ) return; // we dont need to write that + resultingTTLContent += "### Class Definitions (Number of Classes) " + currentNodes.length + " ###\r\n"; + for ( var i = 0; i < currentNodes.length; i++ ) { + // check for node type here and return false + resultingTTLContent += "# --------------------------- Class " + i + "------------------------- \r\n"; + var addedElement = extractClassDescription(currentNodes[i]); + resultingTTLContent += addedElement; + + if ( addedElement.indexOf("WHYEMPTYNAME") !== -1 ) { + return false; + } + } + return true; + } + + function getPresentAttribute( selectedElement, element ){ + var attr = selectedElement.attributes(); + return (attr.indexOf(element) >= 0); + } + + function extractClassDescription( node ){ + var subject = node.prefixRepresentation; + var predicate = "rdf:type"; + var object = node.type(); + if ( node.type() === "owl:equivalentClass" ) + object = "owl:Class"; + if ( node.type() === "owl:disjointUnionOf" ) + object = "owl:Class"; + if ( node.type() === "owl:unionOf" ) + object = "owl:Class"; + var arrayOfNodes = []; + var arrayOfUnionNodes = []; + + if ( node.union() ) { + var union = node.union(); + for ( var u = 0; u < union.length; u++ ) { + var u_node = Map_ID2Node[union[u]]; + arrayOfUnionNodes.push(u_node); + } + } + + if ( node.disjointUnion() ) { + var distUnion = node.disjointUnion(); + for ( var du = 0; du < distUnion.length; du++ ) { + var du_node = Map_ID2Node[distUnion[du]]; + arrayOfNodes.push(du_node); + } + } + + var objectDef = subject + " " + predicate + " " + object; + if ( getPresentAttribute(node, "deprecated") === true ) { + objectDef += ", owl:DeprecatedProperty"; + } + // equivalent class handeled using type itself! + + // check for equivalent classes; + var indent = getIndent(subject); + objectDef += "; \r\n"; + for ( var e = 0; e < node.equivalents().length; e++ ) { + var eqIRI = prefixModule.getPrefixRepresentationForFullURI(node.equivalents()[e].iri()); + var eqNode_prefRepresentation = ""; + if ( prefixModule.validURL(eqIRI) === true ) + eqNode_prefRepresentation = "<" + eqIRI + ">"; + else + eqNode_prefRepresentation = eqIRI; + objectDef += indent + " owl:equivalentClass " + eqNode_prefRepresentation + " ;\r\n"; + } + + // if (getPresentAttribute(node,"equivalent")===true){ + // objectDef+=", owl:EquivalentClass"; + // } + + // add Comments + + if ( node.commentForCurrentLanguage() ) { + + objectDef += indent + " rdfs:comment \"" + node.commentForCurrentLanguage() + "\" ;\r\n"; + } + + if ( node.annotations() ) { + var annotations = node.annotations(); + for ( var an in annotations ) { + if ( annotations.hasOwnProperty(an) ) { + var anArrayObj = annotations[an]; + var anObj = anArrayObj[0]; + var an_ident = anObj.identifier; + var an_val = anObj.value; + + if ( an_ident === "isDefinedBy" ) { + objectDef += indent + " rdfs:isDefinedBy <" + an_val + "> ;\r\n"; + } + if ( an_ident === "term_status" ) { + objectDef += indent + " vs:term_status \"" + an_val + "\" ;\r\n"; + } + } + } + } + + + if ( arrayOfNodes.length > 0 ) { + // add disjoint unionOf + objectDef += indent + " owl:disjointUnionOf ("; + for ( var duE = 0; duE < arrayOfNodes.length; duE++ ) { + var duIri = prefixModule.getPrefixRepresentationForFullURI(arrayOfNodes[duE].iri()); + var duNode_prefRepresentation = ""; + if ( prefixModule.validURL(duIri) === true ) + duNode_prefRepresentation = "<" + duIri + ">"; + else + duNode_prefRepresentation = duIri; + objectDef += indent + indent + duNode_prefRepresentation + " \n"; + } + objectDef += ") ;\r\n"; + } + + if ( arrayOfUnionNodes.length > 0 ) { + // add disjoint unionOf + objectDef += indent + " rdfs:subClassOf [ rdf:type owl:Class ; \r\n"; + objectDef += indent + indent + " owl:unionOf ( "; + + for ( var uE = 0; uE < arrayOfUnionNodes.length; uE++ ) { + + if ( arrayOfUnionNodes[uE] && arrayOfUnionNodes[uE].iri() ) { + var uIri = prefixModule.getPrefixRepresentationForFullURI(arrayOfUnionNodes[uE].iri()); + var uNode_prefRepresentation = ""; + if ( prefixModule.validURL(uIri) === true ) + uNode_prefRepresentation = "<" + uIri + ">"; + else + uNode_prefRepresentation = uIri; + objectDef += indent + indent + indent + uNode_prefRepresentation + " \n"; + } + } + objectDef += ") ;\r\n"; + + + } + + + var allProps = graph.getUnfilteredData().properties; + var myProperties = []; + var i; + for ( i = 0; i < allProps.length; i++ ) { + if ( allProps[i].domain() === node && + ( allProps[i].type() === "rdfs:subClassOf" || + allProps[i].type() === "owl:allValuesFrom" || + allProps[i].type() === "owl:someValuesFrom") + ) { + myProperties.push(allProps[i]); + } + // special case disjoint with>> both domain and range get that property + if ( (allProps[i].domain() === node) && + allProps[i].type() === "owl:disjointWith" ) { + myProperties.push(allProps[i]); + } + + } + for ( i = 0; i < myProperties.length; i++ ) { + // depending on the property we have to do some things; + + // special case + if ( myProperties[i].type() === "owl:someValuesFrom" ) { + objectDef += indent + " rdfs:subClassOf [ rdf:type owl:Restriction ; \r\n"; + objectDef += indent + " owl:onProperty " + myProperties[i].prefixRepresentation + ";\r\n"; + if ( myProperties[i].range().type() !== "owl:Thing" ) { + objectDef += indent + " owl:someValuesFrom " + myProperties[i].range().prefixRepresentation + "\r\n"; + } + objectDef += indent + " ];\r\n"; + continue; + } + + if ( myProperties[i].type() === "owl:allValuesFrom" ) { + objectDef += indent + " rdfs:subClassOf [ rdf:type owl:Restriction ; \r\n"; + objectDef += indent + " owl:onProperty " + myProperties[i].prefixRepresentation + ";\r\n"; + if ( myProperties[i].range().type() !== "owl:Thing" ) { + objectDef += indent + " owl:allValuesFrom " + myProperties[i].range().prefixRepresentation + "\r\n"; + } + objectDef += indent + " ];\r\n"; + continue; + } + + if ( myProperties[i].range().type() !== "owl:Thing" ) { + objectDef += indent + " " + myProperties[i].prefixRepresentation + + " " + myProperties[i].range().prefixRepresentation + " ;\r\n"; + + + } + } + + + objectDef += general_Label_languageExtractor(indent, node.label(), "rdfs:label", true); + return objectDef; + + } + + function extractPropertyDescription( property ){ + var subject = property.prefixRepresentation; + if ( subject.length === 0 ) { + console.log("THIS SHOULD NOT HAPPEN"); + var propIRI = prefixModule.getPrefixRepresentationForFullURI(property.iri()); + console.log("FOUND " + propIRI); + + + } + var predicate = "rdf:type"; + var object = property.type(); + + var objectDef = subject + " " + predicate + " " + object; + if ( getPresentAttribute(property, "deprecated") === true ) { + objectDef += ", owl:DeprecatedProperty"; + } + if ( getPresentAttribute(property, "functional") === true ) { + objectDef += ", owl:FunctionalProperty"; + } + if ( getPresentAttribute(property, "inverse functional") === true ) { + objectDef += ", owl:InverseFunctionalProperty"; + } + if ( getPresentAttribute(property, "symmetric") === true ) { + objectDef += ", owl:SymmetricProperty"; + } + if ( getPresentAttribute(property, "transitive") === true ) { + objectDef += ", owl:TransitiveProperty"; + } + var indent = getIndent(subject); + + if ( property.inverse() ) { + objectDef += "; \r\n"; + objectDef += indent + " owl:inverseOf " + property.inverse().prefixRepresentation; + } + + // check for domain and range; + + + var closeStatement = false; + var domain = property.domain(); + var range = property.range(); + + + objectDef += " ;\r\n"; + + + if ( property.commentForCurrentLanguage() ) { + + objectDef += indent + " rdfs:comment \"" + property.commentForCurrentLanguage() + "\" ;\r\n"; + } + + if ( property.superproperties() ) { + var superProps = property.superproperties(); + for ( var sP = 0; sP < superProps.length; sP++ ) { + var sPelement = superProps[sP]; + objectDef += indent + "rdfs:subPropertyOf " + sPelement.prefixRepresentation + ";\r\n"; + } + // for (var an in annotations){ + // if (annotations.hasOwnProperty(an)){ + // var anArrayObj=annotations[an]; + // var anObj=anArrayObj[0]; + // var an_ident=anObj.identifier; + // var an_val=anObj.value; + // console.log(an_ident + " "+ an_val); + // + // if (an_ident==="isDefinedBy"){ + // objectDef+=indent+" rdfs:isDefinedBy <"+an_val+"> ;\r\n"; + // } + // if (an_ident==="term_status"){ + // objectDef+=indent+" vs:term_status \""+an_val+"\" ;\r\n"; + // } + // } + // } + + } + + if ( property.annotations() ) { + var annotations = property.annotations(); + for ( var an in annotations ) { + if ( annotations.hasOwnProperty(an) ) { + var anArrayObj = annotations[an]; + var anObj = anArrayObj[0]; + var an_ident = anObj.identifier; + var an_val = anObj.value; + + if ( an_ident === "isDefinedBy" ) { + objectDef += indent + " rdfs:isDefinedBy <" + an_val + "> ;\r\n"; + } + if ( an_ident === "term_status" ) { + objectDef += indent + " vs:term_status \"" + an_val + "\" ;\r\n"; + } + } + } + } + + + if ( domain.type() === "owl:Thing" && range.type() === "owl:Thing" ) { + // we do not write domain and range + if ( typeof property.label() !== "object" && property.label().length === 0 ) { + closeStatement = true; + } + } + + + if ( closeStatement === true ) { + var uobjectDef = objectDef.substring(0, objectDef.length - 2); + objectDef = uobjectDef + " . \r\n"; + return objectDef; + } + // objectDef+="; \r\n"; + var labelDescription; + + + if ( domain.type() === "owl:Thing" && range.type() === "owl:Thing" ) { + labelDescription = general_Label_languageExtractor(indent, property.label(), "rdfs:label", true); + objectDef += labelDescription; + } + else { + // do not close the statement; + labelDescription = general_Label_languageExtractor(indent, property.label(), "rdfs:label"); + objectDef += labelDescription; + if ( domain.type() !== "owl:Thing" ) { + objectDef += indent + " rdfs:domain " + domain.prefixRepresentation + ";\r\n"; + } + if ( range.type() !== "owl:Thing" ) { + objectDef += indent + " rdfs:range " + range.prefixRepresentation + ";\r\n"; + } + + // close statement now; + + var s_needUpdate = objectDef; + var s_lastPtr = s_needUpdate.lastIndexOf(";"); + objectDef = s_needUpdate.substring(0, s_lastPtr) + " . \r\n"; + } + + return objectDef; + + } + + + exportTTLModule.resultingTTL_Content = function (){ + return resultingTTLContent; + }; + + function getIndent( name ){ + if ( name === undefined ) { + return "WHYEMPTYNAME?"; + } + return new Array(name.length + 1).join(" "); + } + + function prepareHeader(){ + resultingTTLContent += "#################################################################\r\n"; + resultingTTLContent += "### Generated with the experimental alpha version of the TTL exporter of WebVOWL (version 1.1.7) " + + " http://visualdataweb.de/webvowl/ ###\r\n"; + resultingTTLContent += "#################################################################\r\n\r\n"; + + } + + function preparePrefixList(){ + var ontoIri = graph.options().getGeneralMetaObjectProperty('iri'); + var prefixList = graph.options().prefixList(); + var prefixDef = []; + prefixDef.push('@prefix : \t\t<' + ontoIri + '> .'); + for ( var name in prefixList ) { + if ( prefixList.hasOwnProperty(name) ) { + prefixDef.push('@prefix ' + name + ': \t\t<' + prefixList[name] + '> .'); + } + } + prefixDef.push('@base \t\t\t<' + ontoIri + '> .\r\n'); + + for ( var i = 0; i < prefixDef.length; i++ ) { + resultingTTLContent += prefixDef[i] + '\r\n'; + } + } + + function prepareOntologyDef(){ + var ontoIri = graph.options().getGeneralMetaObjectProperty('iri'); + var indent = getIndent('<' + ontoIri + '>'); + resultingTTLContent += '<' + ontoIri + '> rdf:type owl:Ontology ;\r\n' + + getOntologyTitle(indent) + + getOntologyDescription(indent) + + getOntologyVersion(indent) + + getOntologyAuthor(indent); + + // close the statement; + var s_needUpdate = resultingTTLContent; + var s_lastPtr = s_needUpdate.lastIndexOf(";"); + resultingTTLContent = s_needUpdate.substring(0, s_lastPtr) + " . \r\n"; + } + + function getOntologyTitle( indent ){ + return general_languageExtractor(indent, "title", "dc:title"); + } + + function getOntologyDescription( indent ){ + return general_languageExtractor(indent, "description", "dc:description"); + } + + function getOntologyAuthor( indent ){ + var languageElement = graph.options().getGeneralMetaObjectProperty('author'); + if ( languageElement ) { + if ( typeof languageElement !== "object" ) { + if ( languageElement.length === 0 ) + return ""; // an empty string + var aString = indent + " dc:creator " + '"' + languageElement + '";\r\n'; + return aString; + } + // we assume this thing is an array; + var authorString = indent + " dc:creator " + '"'; + for ( var i = 0; i < languageElement.length - 1; i++ ) { + authorString += languageElement[i] + ", "; + } + authorString += languageElement[languageElement.length - 1] + '";\r\n'; + return authorString; + } else { + return ""; // an empty string + } + } + + function getOntologyVersion( indent ){ + var languageElement = graph.options().getGeneralMetaObjectProperty('version'); + if ( languageElement ) { + if ( typeof languageElement !== "object" ) { + if ( languageElement.length === 0 ) + return ""; // an empty string + } + return general_languageExtractor(indent, "version", "owl:versionInfo"); + } else return ""; // an empty string + } + + function general_languageExtractor( indent, metaObjectDescription, annotationDescription, endStatement ){ + var languageElement = graph.options().getGeneralMetaObjectProperty(metaObjectDescription); + + if ( typeof languageElement === 'object' ) { + + var resultingLanguages = []; + for ( var name in languageElement ) { + if ( languageElement.hasOwnProperty(name) ) { + var content = languageElement[name]; + if ( name === "undefined" ) { + resultingLanguages.push(indent + " " + annotationDescription + ' "' + content + '"@en; \r\n'); + } + else { + resultingLanguages.push(indent + " " + annotationDescription + ' "' + content + '"@' + name + '; \r\n'); + } + } + } + // create resulting titles; + + var resultingString = ""; + for ( var i = 0; i < resultingLanguages.length; i++ ) { + resultingString += resultingLanguages[i]; + } + if ( endStatement && endStatement === true ) { + var needUpdate = resultingString; + var lastPtr = needUpdate.lastIndexOf(";"); + return needUpdate.substring(0, lastPtr) + ". \r\n"; + } else { + return resultingString; + } + + } else { + if ( endStatement && endStatement === true ) { + var s_needUpdate = indent + " " + annotationDescription + ' "' + languageElement + '"@en; \r\n'; + var s_lastPtr = s_needUpdate.lastIndexOf(";"); + return s_needUpdate.substring(0, s_lastPtr) + " . \r\n"; + } + return indent + " " + annotationDescription + ' "' + languageElement + '"@en;\r\n'; + } + } + + function general_Label_languageExtractor( indent, label, annotationDescription, endStatement ){ + var languageElement = label; + + if ( typeof languageElement === 'object' ) { + var resultingLanguages = []; + for ( var name in languageElement ) { + if ( languageElement.hasOwnProperty(name) ) { + var content = languageElement[name]; + if ( name === "undefined" ) { + resultingLanguages.push(indent + " " + annotationDescription + ' "' + content + '"@en; \r\n'); + } + else { + resultingLanguages.push(indent + " " + annotationDescription + ' "' + content + '"@' + name + '; \r\n'); + } + } + } + // create resulting titles; + var resultingString = ""; + for ( var i = 0; i < resultingLanguages.length; i++ ) { + resultingString += resultingLanguages[i]; + } + if ( endStatement && endStatement === true ) { + var needUpdate = resultingString; + var lastPtr = needUpdate.lastIndexOf(";"); + return needUpdate.substring(0, lastPtr) + " . \r\n"; + } else { + return resultingString; + } + + } else { + if ( endStatement && endStatement === true ) { + var s_needUpdate = indent + " " + annotationDescription + ' "' + languageElement + '"@en; \r\n'; + var s_lastPtr = s_needUpdate.lastIndexOf(";"); + return s_needUpdate.substring(0, s_lastPtr) + " . \r\n"; + } + return indent + " " + annotationDescription + ' "' + languageElement + '"@en; \r\n'; + } + } + + return exportTTLModule; + }; + + +/***/ }), + +/***/ 325: +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {/** + * Contains the logic for connecting the filters with the website. + * + * @param graph required for calling a refresh after a filter change + * @returns {{}} + */ + module.exports = function ( graph ){ + + var filterMenu = {}, + checkboxData = [], + menuElement = d3.select("#m_filter"), + menuControl = d3.select("#c_filter a"), + nodeDegreeContainer = d3.select("#nodeDegreeFilteringOption"), + graphDegreeLevel, + defaultDegreeValue = 0, + degreeSlider; + + filterMenu.setDefaultDegreeValue = function ( val ){ + defaultDegreeValue = val; + }; + filterMenu.getDefaultDegreeValue = function (){ + return defaultDegreeValue; + }; + + filterMenu.getGraphObject = function (){ + return graph; + }; + /** some getter function **/ + filterMenu.getCheckBoxContainer = function (){ + return checkboxData; + }; + + filterMenu.getDegreeSliderValue = function (){ + return degreeSlider.property("value"); + }; + /** + * Connects the website with graph filters. + * @param datatypeFilter filter for all datatypes + * @param objectPropertyFilter filter for all object properties + * @param subclassFilter filter for all subclasses + * @param disjointFilter filter for all disjoint with properties + * @param setOperatorFilter filter for all set operators with properties + * @param nodeDegreeFilter filters nodes by their degree + */ + filterMenu.setup = function ( datatypeFilter, objectPropertyFilter, subclassFilter, disjointFilter, setOperatorFilter, nodeDegreeFilter ){ + // TODO: is this here really necessarry? << new menu visualization style? + menuControl.on("mouseover", function (){ + var searchMenu = graph.options().searchMenu(); + searchMenu.hideSearchEntries(); + }); + menuControl.on("mouseleave", function (){ + filterMenu.highlightForDegreeSlider(false); + }); + + addFilterItem(datatypeFilter, "datatype", "Datatype properties", "#datatypeFilteringOption"); + addFilterItem(objectPropertyFilter, "objectProperty", "Object properties", "#objectPropertyFilteringOption"); + addFilterItem(subclassFilter, "subclass", "Solitary subclasses", "#subclassFilteringOption"); + addFilterItem(disjointFilter, "disjoint", "Class disjointness", "#disjointFilteringOption"); + addFilterItem(setOperatorFilter, "setoperator", "Set operators", "#setOperatorFilteringOption"); + + addNodeDegreeFilter(nodeDegreeFilter, nodeDegreeContainer); + addAnimationFinishedListener(); + }; + + + function addFilterItem( filter, identifier, pluralNameOfFilteredItems, selector ){ + var filterContainer, + filterCheckbox; + + filterContainer = d3.select(selector) + .append("div") + .classed("checkboxContainer", true); + + filterCheckbox = filterContainer.append("input") + .classed("filterCheckbox", true) + .attr("id", identifier + "FilterCheckbox") + .attr("type", "checkbox") + .property("checked", filter.enabled()); + + // Store for easier resetting + checkboxData.push({ checkbox: filterCheckbox, defaultState: filter.enabled() }); + + filterCheckbox.on("click", function ( silent ){ + // There might be no parameters passed because of a manual + // invocation when resetting the filters + var isEnabled = filterCheckbox.property("checked"); + filter.enabled(isEnabled); + if ( silent !== true ) { + // updating graph when silent is false or the parameter is not given. + graph.update(); + } + }); + + filterContainer.append("label") + .attr("for", identifier + "FilterCheckbox") + .text(pluralNameOfFilteredItems); + } + + function addNodeDegreeFilter( nodeDegreeFilter, container ){ + nodeDegreeFilter.setMaxDegreeSetter(function ( maxDegree ){ + degreeSlider.attr("max", maxDegree); + setSliderValue(degreeSlider, Math.min(maxDegree, degreeSlider.property("value"))); + }); + + nodeDegreeFilter.setDegreeGetter(function (){ + return degreeSlider.property("value"); + }); + + nodeDegreeFilter.setDegreeSetter(function ( value ){ + setSliderValue(degreeSlider, value); + }); + + var sliderContainer, + sliderValueLabel; + + sliderContainer = container.append("div") + .classed("distanceSliderContainer", true); + + degreeSlider = sliderContainer.append("input") + .attr("id", "nodeDegreeDistanceSlider") + .attr("type", "range") + .attr("min", 0) + .attr("step", 1); + + sliderContainer.append("label") + .classed("description", true) + .attr("for", "nodeDegreeDistanceSlider") + .text("Degree of collapsing"); + + sliderValueLabel = sliderContainer.append("label") + .classed("value", true) + .attr("for", "nodeDegreeDistanceSlider") + .text(0); + + + degreeSlider.on("change", function ( silent ){ + if ( silent !== true ) { + graph.update(); + graphDegreeLevel = degreeSlider.property("value"); + } + }); + + + degreeSlider.on("input", function (){ + var degree = degreeSlider.property("value"); + sliderValueLabel.text(degree); + }); + + + // adding wheel events + degreeSlider.on("wheel", handleWheelEvent); + degreeSlider.on("focusout", function (){ + if ( degreeSlider.property("value") !== graphDegreeLevel ) { + graph.update(); + } + }); + } + + function handleWheelEvent(){ + var wheelEvent = d3.event; + + var offset; + if ( wheelEvent.deltaY < 0 ) offset = 1; + if ( wheelEvent.deltaY > 0 ) offset = -1; + var maxDeg = parseInt(degreeSlider.attr("max")); + var oldVal = parseInt(degreeSlider.property("value")); + var newSliderValue = oldVal + offset; + if ( oldVal !== newSliderValue && (newSliderValue >= 0 && newSliderValue <= maxDeg) ) { + // only update when they are different [reducing redundant updates] + // set the new value and emit an update signal + degreeSlider.property("value", newSliderValue); + degreeSlider.on("input")();// <<-- sets the text value + graph.update(); + } + d3.event.preventDefault(); + } + + function setSliderValue( slider, value ){ + slider.property("value", value).on("input")(); + } + + /** + * Resets the filters (and also filtered elements) to their default. + */ + filterMenu.reset = function (){ + checkboxData.forEach(function ( checkboxData ){ + var checkbox = checkboxData.checkbox, + enabledByDefault = checkboxData.defaultState, + isChecked = checkbox.property("checked"); + + if ( isChecked !== enabledByDefault ) { + checkbox.property("checked", enabledByDefault); + // Call onclick event handlers programmatically + checkbox.on("click")(); + } + }); + + setSliderValue(degreeSlider, 0); + degreeSlider.on("change")(); + }; + + function addAnimationFinishedListener(){ + menuControl.node().addEventListener("animationend", function (){ + menuControl.classed("buttonPulse", false); + menuControl.classed("filterMenuButtonHighlight", true); + + }); + } + + filterMenu.killButtonAnimation = function (){ + menuControl.classed("buttonPulse", false); + menuControl.classed("filterMenuButtonHighlight", false); + }; + + + filterMenu.highlightForDegreeSlider = function ( enable ){ + if ( !arguments.length ) { + enable = true; + } + menuControl.classed("highlighted", enable); + nodeDegreeContainer.classed("highlighted", enable); + // pulse button handling + if ( menuControl.classed("buttonPulse") === true && enable === true ) { + menuControl.classed("buttonPulse", false); + var timer = setTimeout(function (){ + menuControl.classed("buttonPulse", enable); + clearTimeout(timer); + // after the time is done, remove the pulse but stay highlighted + }, 100); + } else { + menuControl.classed("buttonPulse", enable); + menuControl.classed("filterMenuButtonHighlight", enable); + } + }; + + + /** importer functions **/ + // setting manually the values of the filter + // no update of the gui settings, these are updated in updateSettings + filterMenu.setCheckBoxValue = function ( id, checked ){ + for ( var i = 0; i < checkboxData.length; i++ ) { + var cbdId = checkboxData[i].checkbox.attr("id"); + if ( cbdId === id ) { + checkboxData[i].checkbox.property("checked", checked); + break; + } + } + }; + + filterMenu.getCheckBoxValue = function ( id ){ + for ( var i = 0; i < checkboxData.length; i++ ) { + var cbdId = checkboxData[i].checkbox.attr("id"); + if ( cbdId === id ) { + return checkboxData[i].checkbox.property("checked"); + + } + } + }; + // set the value of the slider + filterMenu.setDegreeSliderValue = function ( val ){ + degreeSlider.property("value", val); + }; + + filterMenu.getDegreeSliderValue = function (){ + return degreeSlider.property("value"); + }; + + // update the gui without invoking graph update (calling silent onclick function) + filterMenu.updateSettings = function (){ + var silent = true; + var sliderValue = degreeSlider.property("value"); + if ( sliderValue > 0 ) { + filterMenu.highlightForDegreeSlider(true); + } else { + filterMenu.highlightForDegreeSlider(false); + } + checkboxData.forEach(function ( checkboxData ){ + var checkbox = checkboxData.checkbox; + checkbox.on("click")(silent); + }); + + degreeSlider.on("input")(); + degreeSlider.on("change")(); + + }; + + return filterMenu; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), + +/***/ 326: +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {/** + * Contains the logic for setting up the gravity sliders. + * + * @param graph the associated webvowl graph + * @returns {{}} + */ + module.exports = function ( graph ){ + + var gravityMenu = {}, + sliders = [], + options = graph.graphOptions(), + defaultCharge = options.charge(); + + + /** + * Adds the gravity sliders to the website. + */ + gravityMenu.setup = function (){ + var menuEntry = d3.select("#m_gravity"); + menuEntry.on("mouseover", function (){ + var searchMenu = graph.options().searchMenu(); + searchMenu.hideSearchEntries(); + }); + addDistanceSlider("#classSliderOption", "class", "Class distance", options.classDistance); + addDistanceSlider("#datatypeSliderOption", "datatype", "Datatype distance", options.datatypeDistance); + }; + + function addDistanceSlider( selector, identifier, label, distanceFunction ){ + var defaultLinkDistance = distanceFunction(); + + var sliderContainer, + sliderValueLabel; + + sliderContainer = d3.select(selector) + .append("div") + .datum({ distanceFunction: distanceFunction }) // connect the options-function with the slider + .classed("distanceSliderContainer", true); + + var slider = sliderContainer.append("input") + .attr("id", identifier + "DistanceSlider") + .attr("type", "range") + .attr("min", 10) + .attr("max", 600) + .attr("value", distanceFunction()) + .attr("step", 10); + + sliderContainer.append("label") + .classed("description", true) + .attr("for", identifier + "DistanceSlider") + .text(label); + + sliderValueLabel = sliderContainer.append("label") + .classed("value", true) + .attr("for", identifier + "DistanceSlider") + .text(distanceFunction()); + + // Store slider for easier resetting + sliders.push(slider); + + slider.on("focusout", function (){ + graph.updateStyle(); + }); + + slider.on("input", function (){ + var distance = slider.property("value"); + distanceFunction(distance); + adjustCharge(defaultLinkDistance); + sliderValueLabel.text(distance); + graph.updateStyle(); + }); + + // add wheel event to the slider + slider.on("wheel", function (){ + var wheelEvent = d3.event; + var offset; + if ( wheelEvent.deltaY < 0 ) offset = 10; + if ( wheelEvent.deltaY > 0 ) offset = -10; + var oldVal = parseInt(slider.property("value")); + var newSliderValue = oldVal + offset; + if ( newSliderValue !== oldVal ) { + slider.property("value", newSliderValue); + distanceFunction(newSliderValue); + slider.on("input")(); // << set text and update the graphStyles + } + d3.event.preventDefault(); + }); + } + + function adjustCharge( defaultLinkDistance ){ + var greaterDistance = Math.max(options.classDistance(), options.datatypeDistance()), + ratio = greaterDistance / defaultLinkDistance, + newCharge = defaultCharge * ratio; + + options.charge(newCharge); + } + + /** + * Resets the gravity sliders to their default. + */ + gravityMenu.reset = function (){ + sliders.forEach(function ( slider ){ + slider.property("value", function ( d ){ + // Simply reload the distance from the options + return d.distanceFunction(); + }); + slider.on("input")(); + }); + }; + + + return gravityMenu; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), + +/***/ 327: +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {/** + * Contains the logic for connecting the modes with the website. + * + * @param graph the graph that belongs to these controls + * @returns {{}} + */ + module.exports = function ( graph ){ + + var SAME_COLOR_MODE = { text: "Multicolor", type: "same" }; + var GRADIENT_COLOR_MODE = { text: "Multicolor", type: "gradient" }; + + var modeMenu = {}, + checkboxes = [], + colorModeSwitch; + + var dynamicLabelWidthCheckBox; + // getter and setter for the state of color modes + modeMenu.colorModeState = function ( s ){ + if ( !arguments.length ) return colorModeSwitch.datum().active; + colorModeSwitch.datum().active = s; + return modeMenu; + }; + + + modeMenu.setDynamicLabelWidth = function ( val ){ + dynamicLabelWidthCheckBox.property("checked", val); + }; + // getter for checkboxes + modeMenu.getCheckBoxContainer = function (){ + return checkboxes; + }; + // getter for the color switch [needed? ] + modeMenu.colorModeSwitch = function (){ + return colorModeSwitch; + }; + + /** + * Connects the website with the available graph modes. + */ + modeMenu.setup = function ( pickAndPin, nodeScaling, compactNotation, colorExternals ){ + var menuEntry = d3.select("#m_modes"); + menuEntry.on("mouseover", function (){ + var searchMenu = graph.options().searchMenu(); + searchMenu.hideSearchEntries(); + }); + addCheckBoxD("labelWidth", "Dynamic label width", "#dynamicLabelWidth", graph.options().dynamicLabelWidth, 1); + addCheckBox("editorMode", "Editing ", "#editMode", graph.editorMode); + addModeItem(pickAndPin, "pickandpin", "Pick & pin", "#pickAndPinOption", false); + addModeItem(nodeScaling, "nodescaling", "Node scaling", "#nodeScalingOption", true); + addModeItem(compactNotation, "compactnotation", "Compact notation", "#compactNotationOption", true); + var container = addModeItem(colorExternals, "colorexternals", "Color externals", "#colorExternalsOption", true); + colorModeSwitch = addExternalModeSelection(container, colorExternals); + }; + function addCheckBoxD( identifier, modeName, selector, onChangeFunc, updateLvl ){ + var moduleOptionContainer = d3.select(selector) + .append("div") + .classed("checkboxContainer", true); + + var moduleCheckbox = moduleOptionContainer.append("input") + .classed("moduleCheckbox", true) + .attr("id", identifier + "ModuleCheckbox") + .attr("type", "checkbox") + .property("checked", onChangeFunc()); + + moduleCheckbox.on("click", function ( d ){ + var isEnabled = moduleCheckbox.property("checked"); + onChangeFunc(isEnabled); + d3.select("#maxLabelWidthSlider").node().disabled = !isEnabled; + d3.select("#maxLabelWidthvalueLabel").classed("disabledLabelForSlider", !isEnabled); + d3.select("#maxLabelWidthDescriptionLabel").classed("disabledLabelForSlider", !isEnabled); + + if ( updateLvl > 0 ) { + graph.animateDynamicLabelWidth(); + // graph.lazyRefresh(); + } + }); + moduleOptionContainer.append("label") + .attr("for", identifier + "ModuleCheckbox") + .text(modeName); + if ( identifier === "editorMode" ) { + moduleOptionContainer.append("label") + .attr("style", "font-size:10px;padding-top:3px") + .text("(experimental)"); + } + + dynamicLabelWidthCheckBox = moduleCheckbox; + } + + function addCheckBox( identifier, modeName, selector, onChangeFunc ){ + var moduleOptionContainer = d3.select(selector) + .append("div") + .classed("checkboxContainer", true); + + var moduleCheckbox = moduleOptionContainer.append("input") + .classed("moduleCheckbox", true) + .attr("id", identifier + "ModuleCheckbox") + .attr("type", "checkbox") + .property("checked", onChangeFunc()); + + moduleCheckbox.on("click", function ( d ){ + var isEnabled = moduleCheckbox.property("checked"); + onChangeFunc(isEnabled); + if ( isEnabled === true ) + graph.showEditorHintIfNeeded(); + }); + moduleOptionContainer.append("label") + .attr("for", identifier + "ModuleCheckbox") + .text(modeName); + if ( identifier === "editorMode" ) { + moduleOptionContainer.append("label") + .attr("style", "font-size:10px;padding-top:3px") + .text(" (experimental)"); + } + } + + function addModeItem( module, identifier, modeName, selector, updateGraphOnClick ){ + var moduleOptionContainer, + moduleCheckbox; + + moduleOptionContainer = d3.select(selector) + .append("div") + .classed("checkboxContainer", true) + .datum({ module: module, defaultState: module.enabled() }); + + moduleCheckbox = moduleOptionContainer.append("input") + .classed("moduleCheckbox", true) + .attr("id", identifier + "ModuleCheckbox") + .attr("type", "checkbox") + .property("checked", module.enabled()); + + // Store for easier resetting all modes + checkboxes.push(moduleCheckbox); + + moduleCheckbox.on("click", function ( d, silent ){ + var isEnabled = moduleCheckbox.property("checked"); + d.module.enabled(isEnabled); + if ( updateGraphOnClick && silent !== true ) { + graph.executeColorExternalsModule(); + graph.executeCompactNotationModule(); + graph.lazyRefresh(); + } + }); + + moduleOptionContainer.append("label") + .attr("for", identifier + "ModuleCheckbox") + .text(modeName); + + return moduleOptionContainer; + } + + function addExternalModeSelection( container, colorExternalsMode ){ + var button = container.append("button").datum({ active: false }).classed("color-mode-switch", true); + applyColorModeSwitchState(button, colorExternalsMode); + + button.on("click", function ( silent ){ + var data = button.datum(); + data.active = !data.active; + applyColorModeSwitchState(button, colorExternalsMode); + if ( colorExternalsMode.enabled() && silent !== true ) { + graph.executeColorExternalsModule(); + graph.lazyRefresh(); + } + }); + + return button; + } + + function applyColorModeSwitchState( element, colorExternalsMode ){ + var isActive = element.datum().active; + var activeColorMode = getColorModeByState(isActive); + + element.classed("active", isActive) + .text(activeColorMode.text); + + if ( colorExternalsMode ) { + colorExternalsMode.colorModeType(activeColorMode.type); + } + } + + function getColorModeByState( isActive ){ + return isActive ? GRADIENT_COLOR_MODE : SAME_COLOR_MODE; + } + + /** + * Resets the modes to their default. + */ + modeMenu.reset = function (){ + checkboxes.forEach(function ( checkbox ){ + var defaultState = checkbox.datum().defaultState, + isChecked = checkbox.property("checked"); + + if ( isChecked !== defaultState ) { + checkbox.property("checked", defaultState); + // Call onclick event handlers programmatically + checkbox.on("click")(checkbox.datum()); + } + + // Reset the module that is connected with the checkbox + checkbox.datum().module.reset(); + }); + + // set the switch to active and simulate disabling + colorModeSwitch.datum().active = true; + colorModeSwitch.on("click")(); + }; + + /** importer functions **/ + // setting manually the values of the filter + // no update of the gui settings, these are updated in updateSettings + modeMenu.setCheckBoxValue = function ( id, checked ){ + for ( var i = 0; i < checkboxes.length; i++ ) { + var cbdId = checkboxes[i].attr("id"); + + if ( cbdId === id ) { + checkboxes[i].property("checked", checked); + break; + } + } + }; + modeMenu.getCheckBoxValue = function ( id ){ + for ( var i = 0; i < checkboxes.length; i++ ) { + var cbdId = checkboxes[i].attr("id"); + if ( cbdId === id ) { + return checkboxes[i].property("checked"); + } + } + }; + + modeMenu.setColorSwitchState = function ( state ){ + // need the !state because we simulate later a click + modeMenu.colorModeState(!state); + }; + modeMenu.setColorSwitchStateUsingURL = function ( state ){ + // need the !state because we simulate later a click + modeMenu.colorModeState(!state); + colorModeSwitch.on("click")(true); + }; + + + modeMenu.updateSettingsUsingURL = function (){ + var silent = true; + checkboxes.forEach(function ( checkbox ){ + checkbox.on("click")(checkbox.datum(), silent); + }); + }; + + modeMenu.updateSettings = function (){ + var silent = true; + checkboxes.forEach(function ( checkbox ){ + checkbox.on("click")(checkbox.datum(), silent); + }); + // this simulates onclick and inverts its state + colorModeSwitch.on("click")(silent); + }; + return modeMenu; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), + +/***/ 328: +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {module.exports = function ( graph ){ + var debugMenu = {}, + checkboxes = []; + + + var hoverFlag = false; + var specialCbx; + debugMenu.setup = function (){ + var menuEntry = d3.select("#debugMenuHref"); + + menuEntry.on("mouseover", function (){ + if ( hoverFlag === false ) { + var searchMenu = graph.options().searchMenu(); + searchMenu.hideSearchEntries(); + specialCbx.on("click")(true); + if ( graph.editorMode() === false ) { + d3.select("#useAccuracyHelper").style("color", "#979797"); + d3.select("#useAccuracyHelper").style("pointer-events", "none"); + + // regardless the state on which useAccuracyHelper is , we are not in editing mode -> disable it + d3.select("#showDraggerObject").style("color", "#979797"); + d3.select("#showDraggerObject").style("pointer-events", "none"); + } else { + d3.select("#useAccuracyHelper").style("color", "#2980b9"); + d3.select("#useAccuracyHelper").style("pointer-events", "auto"); + } + hoverFlag = true; + } + }); + menuEntry.on("mouseout", function (){ + hoverFlag = false; + }); + + + specialCbx = addCheckBox("useAccuracyHelper", "Use accuracy helper", "#useAccuracyHelper", graph.options().useAccuracyHelper, + function ( enabled, silent ){ + if ( !enabled ) { + d3.select("#showDraggerObject").style("color", "#979797"); + d3.select("#showDraggerObject").style("pointer-events", "none"); + d3.select("#showDraggerObjectConfigCheckbox").node().checked = false; + } else { + d3.select("#showDraggerObject").style("color", "#2980b9"); + d3.select("#showDraggerObject").style("pointer-events", "auto"); + } + + if ( silent === true ) return; + graph.lazyRefresh(); + graph.updateDraggerElements(); + } + ); + addCheckBox("showDraggerObject", "Show accuracy helper", "#showDraggerObject", graph.options().showDraggerObject, + function ( enabled, silent ){ + if ( silent === true ) return; + graph.lazyRefresh(); + graph.updateDraggerElements(); + }); + addCheckBox("showFPS_Statistics", "Show rendering statistics", "#showFPS_Statistics", graph.options().showRenderingStatistic, + function ( enabled, silent ){ + + if ( graph.options().getHideDebugFeatures() === false ) { + d3.select("#FPS_Statistics").classed("hidden", !enabled); + } else { + d3.select("#FPS_Statistics").classed("hidden", true); + } + + + }); + addCheckBox("showModeOfOperation", "Show input modality", "#showModeOfOperation", graph.options().showInputModality, + function ( enabled ){ + if ( graph.options().getHideDebugFeatures() === false ) { + d3.select("#modeOfOperationString").classed("hidden", !enabled); + } else { + d3.select("#modeOfOperationString").classed("hidden", true); + } + }); + + + }; + + + function addCheckBox( identifier, modeName, selector, onChangeFunc, _callbackFunction ){ + var configOptionContainer = d3.select(selector) + .append("div") + .classed("checkboxContainer", true); + var configCheckbox = configOptionContainer.append("input") + .classed("moduleCheckbox", true) + .attr("id", identifier + "ConfigCheckbox") + .attr("type", "checkbox") + .property("checked", onChangeFunc()); + + + configCheckbox.on("click", function ( silent ){ + var isEnabled = configCheckbox.property("checked"); + onChangeFunc(isEnabled); + _callbackFunction(isEnabled, silent); + + }); + checkboxes.push(configCheckbox); + configOptionContainer.append("label") + .attr("for", identifier + "ConfigCheckbox") + .text(modeName); + + return configCheckbox; + } + + debugMenu.setCheckBoxValue = function ( identifier, value ){ + for ( var i = 0; i < checkboxes.length; i++ ) { + var cbdId = checkboxes[i].attr("id"); + if ( cbdId === identifier ) { + checkboxes[i].property("checked", value); + break; + } + } + }; + + debugMenu.getCheckBoxValue = function ( id ){ + for ( var i = 0; i < checkboxes.length; i++ ) { + var cbdId = checkboxes[i].attr("id"); + if ( cbdId === id ) { + return checkboxes[i].property("checked"); + } + } + }; + + debugMenu.updateSettings = function (){ + d3.selectAll(".debugOption").classed("hidden", graph.options().getHideDebugFeatures()); + + var silent = true; + checkboxes.forEach(function ( checkbox ){ + checkbox.on("click")(silent); + }); + if ( graph.editorMode() === false ) { + + d3.select("#useAccuracyHelper").style("color", "#979797"); + d3.select("#useAccuracyHelper").style("pointer-events", "none"); + + // regardless the state on which useAccuracyHelper is , we are not in editing mode -> disable it + d3.select("#showDraggerObject").style("color", "#979797"); + d3.select("#showDraggerObject").style("pointer-events", "none"); + } else { + + d3.select("#useAccuracyHelper").style("color", "#2980b9"); + d3.select("#useAccuracyHelper").style("pointer-events", "auto"); + } + + }; + + return debugMenu; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), + +/***/ 329: +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {var unescape = __webpack_require__(330); + + module.exports = function ( graph ){ + + var ontologyMenu = {}, + loadingInfo = d3.select("#loading-info"), + loadingProgress = d3.select("#loading-progress"), + + ontologyMenuTimeout, + fileToLoad, + stopTimer = false, + loadingError = false, + loadingStatusTimer, + conversion_sessionId, + cachedConversions = {}, + loadingModule, + loadOntologyFromText; + var currentLoadedOntologyName = ""; + + String.prototype.beginsWith = function ( string ){ + return (this.indexOf(string) === 0); + }; + + ontologyMenu.getLoadingFunction = function (){ + return loadOntologyFromText; + }; + + ontologyMenu.clearCachedVersion = function (){ + if ( cachedConversions[currentLoadedOntologyName] ) { + cachedConversions[currentLoadedOntologyName] = undefined; + } + }; + + + ontologyMenu.reloadCachedOntology = function (){ + ontologyMenu.clearCachedVersion(); + graph.clearGraphData(); + loadingModule.parseUrlAndLoadOntology(false); + }; + + ontologyMenu.cachedOntology = function ( ontoName ){ + currentLoadedOntologyName = ontoName; + if ( cachedConversions[ontoName] ) { + var locStr = String(location.hash); + d3.select("#reloadSvgIcon").node().disabled = false; + graph.showReloadButtonAfterLayoutOptimization(true); + if ( locStr.indexOf("#file") > -1 ) { + d3.select("#reloadSvgIcon").node().disabled = true; + d3.select("#reloadCachedOntology").node().title = "reloading original version not possible, please reload the file"; + d3.select("#reloadSvgIcon").classed("disabledReloadElement", true); + d3.select("#svgStringText").style("fill", "gray"); + d3.select("#svgStringText").classed("noselect", true); + } + else { + d3.select("#reloadCachedOntology").node().title = "generate new visualization and overwrite cached ontology"; + d3.select("#reloadSvgIcon").classed("disabledReloadElement", false); + d3.select("#svgStringText").style("fill", "black"); + d3.select("#svgStringText").classed("noselect", true); + } + } else { + graph.showReloadButtonAfterLayoutOptimization(false); + + } + return cachedConversions[ontoName]; + }; + ontologyMenu.setCachedOntology = function ( ontoName, ontoContent ){ + cachedConversions[ontoName] = ontoContent; + currentLoadedOntologyName = ontoName; + }; + + ontologyMenu.getErrorStatus = function (){ + return loadingError; + }; + + ontologyMenu.setup = function ( _loadOntologyFromText ){ + loadOntologyFromText = _loadOntologyFromText; + loadingModule = graph.options().loadingModule(); + var menuEntry = d3.select("#m_select"); + menuEntry.on("mouseover", function (){ + var searchMenu = graph.options().searchMenu(); + searchMenu.hideSearchEntries(); + }); + + setupConverterButtons(); + setupUploadButton(); + + var descriptionButton = d3.select("#error-description-button").datum({ open: false }); + descriptionButton.on("click", function ( data ){ + var errorContainer = d3.select("#error-description-container"); + var errorDetailsButton = d3.select(this); + + // toggle the state + data.open = !data.open; + var descriptionVisible = data.open; + if ( descriptionVisible ) { + errorDetailsButton.text("Hide error details"); + } else { + errorDetailsButton.text("Show error details"); + } + errorContainer.classed("hidden", !descriptionVisible); + }); + + setupUriListener(); + loadingModule.setOntologyMenu(ontologyMenu); + }; + + + function setupUriListener(){ + // reload ontology when hash parameter gets changed manually + d3.select(window).on("hashchange", function (){ + var oldURL = d3.event.oldURL, newURL = d3.event.newURL; + if ( oldURL !== newURL ) { + // don't reload when just the hash parameter gets appended + if ( newURL === oldURL + "#" ) { + return; + } + updateNavigationHrefs(); + loadingModule.parseUrlAndLoadOntology(); + } + }); + updateNavigationHrefs(); + } + + ontologyMenu.stopLoadingTimer = function (){ + stopTimer = true; + clearTimeout(loadingStatusTimer); + }; + + /** + * Quick fix: update all anchor tags that are used as buttons because a click on them + * changes the url and this will load an other ontology. + */ + function updateNavigationHrefs(){ + d3.selectAll("#menuElementContainer > li > a").attr("href", location.hash || "#"); + } + + ontologyMenu.setIriText = function ( text ){ + d3.select("#iri-converter-input").node().value = text; + d3.select("#iri-converter-button").attr("disabled", false); + d3.select("#iri-converter-form").on("submit")(); + }; + + ontologyMenu.clearDetailInformation = function (){ + var bpContainer = d3.select("#bulletPoint_container"); + var htmlCollection = bpContainer.node().children; + var numEntries = htmlCollection.length; + + for ( var i = 0; i < numEntries; i++ ) { + htmlCollection[0].remove(); + } + }; + ontologyMenu.append_message = function ( msg ){ + // forward call + append_message(msg); + }; + function append_message( msg ){ + var bpContainer = d3.select("#bulletPoint_container"); + var div = bpContainer.append("div"); + div.node().innerHTML = msg; + loadingModule.scrollDownDetails(); + } + + ontologyMenu.append_message_toLastBulletPoint = function ( msg ){ + // forward call + append_message_toLastBulletPoint(msg); + }; + + ontologyMenu.append_bulletPoint = function ( msg ){ + // forward call + append_bulletPoint(msg); + }; + function append_message_toLastBulletPoint( msg ){ + var bpContainer = d3.select("#bulletPoint_container"); + var htmlCollection = bpContainer.node().getElementsByTagName("LI"); + var lastItem = htmlCollection.length - 1; + if ( lastItem >= 0 ) { + var oldText = htmlCollection[lastItem].innerHTML; + htmlCollection[lastItem].innerHTML = oldText + msg; + } + loadingModule.scrollDownDetails(); + } + + function append_bulletPoint( msg ){ + var bp_container = d3.select("#bulletPoint_container"); + var bp = bp_container.append("li"); + bp.node().innerHTML = msg; + d3.select("#currentLoadingStep").node().innerHTML = msg; + loadingModule.scrollDownDetails(); + } + + + function setupConverterButtons(){ + var iriConverterButton = d3.select("#iri-converter-button"); + var iriConverterInput = d3.select("#iri-converter-input"); + + iriConverterInput.on("input", function (){ + keepOntologySelectionOpenShortly(); + + var inputIsEmpty = iriConverterInput.property("value") === ""; + iriConverterButton.attr("disabled", inputIsEmpty || undefined); + }).on("click", function (){ + keepOntologySelectionOpenShortly(); + }); + + d3.select("#iri-converter-form").on("submit", function (){ + var inputName = iriConverterInput.property("value"); + + // remove first spaces + var clearedName = inputName.replace(/%20/g, " "); + while ( clearedName.beginsWith(" ") ) { + clearedName = clearedName.substr(1, clearedName.length); + } + // remove ending spaces + while ( clearedName.endsWith(" ") ) { + clearedName = clearedName.substr(0, clearedName.length - 1); + } + // check if iri is actually an url for a json file (ends with .json) + // create lowercase filenames; + inputName = clearedName; + var lc_iri = inputName.toLowerCase(); + if ( lc_iri.endsWith(".json") ) { + location.hash = "url=" + inputName; + iriConverterInput.property("value", ""); + iriConverterInput.on("input")(); + } else { + location.hash = "iri=" + inputName; + iriConverterInput.property("value", ""); + iriConverterInput.on("input")(); + } + d3.event.preventDefault(); + return false; + }); + } + + function setupUploadButton(){ + var input = d3.select("#file-converter-input"), + inputLabel = d3.select("#file-converter-label"), + uploadButton = d3.select("#file-converter-button"); + + input.on("change", function (){ + var selectedFiles = input.property("files"); + if ( selectedFiles.length <= 0 ) { + inputLabel.text("Select ontology file"); + uploadButton.property("disabled", true); + } else { + inputLabel.text(selectedFiles[0].name); + fileToLoad = selectedFiles[0].name; + uploadButton.property("disabled", false); + uploadButton.node().click(); + // close menu; + graph.options().navigationMenu().hideAllMenus(); + } + }); + + uploadButton.on("click", function (){ + var selectedFile = input.property("files")[0]; + if ( !selectedFile ) { + return false; + } + var newHashParameter = "file=" + selectedFile.name; + // Trigger the reupload manually, because the iri is not changing + if ( location.hash === "#" + newHashParameter ) { + loadingModule.parseUrlAndLoadOntology(); + } else { + location.hash = newHashParameter; + } + }); + } + + function setLoadingStatusInfo( message ){ + // check if there is a owl2vowl li item; + var o2vConverterContainer = d3.select("#o2vConverterContainer"); + if ( !o2vConverterContainer.node() ) { + var bp_container = d3.select("#bulletPoint_container"); + var div = bp_container.append("div"); + o2vConverterContainer = div.append("ul"); + o2vConverterContainer.attr("id", "o2vConverterContainer"); + o2vConverterContainer.style("margin-left", "-25px"); + } + // clear o2vConverterContainer; + var htmlCollection = o2vConverterContainer.node().children; + var numEntries = htmlCollection.length; + for ( var i = 0; i < numEntries; i++ ) { + htmlCollection[0].remove(); + } + // split tokens provided by o2v messages + var tokens = message.split("* "); + var liForToken; + for ( var t = 0; t < tokens.length; t++ ) { + var tokenMessage = tokens[t]; + // create li for tokens; + if ( tokenMessage.length > 0 ) { + liForToken = o2vConverterContainer.append("li"); + liForToken.attr("type", "disc"); + liForToken.node().innerHTML = tokenMessage.replace(/\n/g, "
"); + } + } + if ( liForToken ) + liForToken.node().innerHTML += "
"; + + loadingModule.scrollDownDetails(); + } + + ontologyMenu.setLoadingStatusInfo = function ( message ){ + // forward call + setLoadingStatusInfo(message); + }; + + function getLoadingStatusOnceCallBacked( callback, parameter ){ + d3.xhr("loadingStatus?sessionId=" + conversion_sessionId, "application/text", function ( error, request ){ + if ( error ) { + console.log("ontologyMenu getLoadingStatusOnceCallBacked throws error"); + console.log("---------Error -----------"); + console.log(error); + console.log("---------Request -----------"); + console.log(request); + } + setLoadingStatusInfo(request.responseText); + callback(parameter); + }); + } + + function getLoadingStatusTimeLooped(){ + d3.xhr("loadingStatus?sessionId=" + conversion_sessionId, "application/text", function ( error, request ){ + if ( error ) { + console.log("ontologyMenu getLoadingStatusTimeLooped throws error"); + console.log("---------Error -----------"); + console.log(error); + console.log("---------Request -----------"); + console.log(request); + } + if ( stopTimer === false ) { + setLoadingStatusInfo(request.responseText); + timedLoadingStatusLogger(); + } + }); + } + + function timedLoadingStatusLogger(){ + clearTimeout(loadingStatusTimer); + if ( stopTimer === false ) { + loadingStatusTimer = setTimeout(function (){ + getLoadingStatusTimeLooped(); + }, 1000); + } + } + + function callbackUpdateLoadingMessage( msg ){ + d3.xhr("loadingStatus", "application/text", function ( error, request ){ + if ( request !== undefined ) { + setLoadingStatusInfo(request.responseText + "
" + msg); + } else { + append_message(msg); + } + }); + } + + ontologyMenu.setConversionID = function ( id ){ + conversion_sessionId = id; + }; + + ontologyMenu.callbackLoad_Ontology_FromIRI = function ( parameter ){ + var relativePath = parameter[0]; + var ontoName = parameter[1]; + var localThreadId = parameter[2]; + stopTimer = false; + timedLoadingStatusLogger(); + d3.xhr(relativePath, "application/json", function ( error, request ){ + var loadingSuccessful = !error; + // check if error occurred or responseText is empty + if ( (error !== null && error.status === 500) || (request && request.responseText.length === 0) ) { + clearTimeout(loadingStatusTimer); + stopTimer = true; + getLoadingStatusOnceCallBacked(callbackFromIRI_URL_ERROR, [error, request, localThreadId]); + } + var jsonText; + if ( loadingSuccessful ) { + clearTimeout(loadingStatusTimer); + stopTimer = true; + jsonText = request.responseText; + getLoadingStatusOnceCallBacked(callbackFromIRI_Success, [jsonText, ontoName, localThreadId]); + } + }); + }; + + + ontologyMenu.callbackLoad_Ontology_From_DirectInput = function ( text, parameter ){ + var input = text; + var sessionId = parameter[1]; + stopTimer = false; + timedLoadingStatusLogger(); + + var formData = new FormData(); + formData.append("input", input); + formData.append("sessionId", sessionId); + var xhr = new XMLHttpRequest(); + + xhr.open("POST", "directInput", true); + xhr.onload = function (){ + clearTimeout(loadingStatusTimer); + stopTimer = true; + getLoadingStatusOnceCallBacked(callbackForConvert, [xhr, input, sessionId]); + }; + timedLoadingStatusLogger(); + xhr.send(formData); + + }; + function callbackFromIRI_Success( parameter ){ + var local_conversionId = parameter[2]; + if ( local_conversionId !== conversion_sessionId ) { + console.log("The conversion process for file:" + parameter[1] + " has been canceled!"); + ontologyMenu.conversionFinished(local_conversionId); + return; + } + loadingModule.loadFromOWL2VOWL(parameter[0], parameter[1]); + ontologyMenu.conversionFinished(); + + } + + function callbackFromDirectInput_Success( parameter ){ + var local_conversionId = parameter[1]; + if ( local_conversionId !== conversion_sessionId ) { + console.log("The conversion process for file:" + parameter[1] + " has been canceled!"); + ontologyMenu.conversionFinished(local_conversionId); + return; + } + loadingModule.loadFromOWL2VOWL(parameter[0], "DirectInputConversionID" + local_conversionId); + ontologyMenu.conversionFinished(); + + } + + ontologyMenu.getConversionId = function (){ + return conversion_sessionId; + }; + + ontologyMenu.callbackLoad_JSON_FromURL = function ( parameter ){ + var relativePath = parameter[0]; + var ontoName = parameter[1]; + var local_conversionId = parameter[2]; + stopTimer = false; + timedLoadingStatusLogger(); + d3.xhr(relativePath, "application/json", function ( error, request ){ + var loadingSuccessful = !error; + // check if error occurred or responseText is empty + if ( (error !== null && error.status === 500) || (request && request.responseText.length === 0) ) { + clearTimeout(loadingStatusTimer); + stopTimer = true; + loadingSuccessful = false; + console.log(request); + console.log(request.responseText.length); + getLoadingStatusOnceCallBacked(callbackFromJSON_URL_ERROR, [error, request, local_conversionId]); + } + if ( loadingSuccessful ) { + clearTimeout(loadingStatusTimer); + stopTimer = true; + var jsonText = request.responseText; + getLoadingStatusOnceCallBacked(callbackFromJSON_Success, [jsonText, ontoName, local_conversionId]); + } + }); + }; + + function callbackFromJSON_Success( parameter ){ + var local_conversionId = parameter[2]; + if ( local_conversionId !== conversion_sessionId ) { + console.log("The conversion process for file:" + parameter[1] + " has been canceled!"); + return; + } + loadingModule.loadFromOWL2VOWL(parameter[0], parameter[1]); + } + + function callbackFromJSON_URL_ERROR( parameter ){ + var error = parameter[0]; + var request = parameter[1]; + var local_conversionId = parameter[2]; + if ( local_conversionId !== conversion_sessionId ) { + console.log("This thread has been canceled!!"); + ontologyMenu.conversionFinished(local_conversionId); + return; + } + callbackUpdateLoadingMessage("
Failed to convert the file. " + + " Ontology could not be loaded.
Is it a valid OWL ontology? Please check with OWL Validator"); + + if ( error !== null && error.status === 500 ) { + append_message("Could not find ontology at the URL"); + } + if ( request && request.responseText.length === 0 ) { + append_message("Received empty graph"); + } + graph.handleOnLoadingError(); + ontologyMenu.conversionFinished(); + } + + + function callbackFromIRI_URL_ERROR( parameter ){ + var error = parameter[0]; + var request = parameter[1]; + var local_conversionId = parameter[2]; + if ( local_conversionId !== conversion_sessionId ) { + console.log("This thread has been canceled!!"); + ontologyMenu.conversionFinished(local_conversionId); + return; + } + callbackUpdateLoadingMessage("
Failed to convert the file. " + + " Ontology could not be loaded.
Is it a valid OWL ontology? Please check with OWL Validator"); + + if ( error !== null && error.status === 500 ) { + append_message("Could not find ontology at the URL"); + } + if ( request && request.responseText.length === 0 ) { + append_message("Received empty graph"); + } + graph.handleOnLoadingError(); + ontologyMenu.conversionFinished(); + } + + function callbackFromDirectInput_ERROR( parameter ){ + + var error = parameter[0]; + var request = parameter[1]; + var local_conversionId = parameter[2]; + if ( local_conversionId !== conversion_sessionId ) { + console.log("The loading process for direct input has been canceled!"); + return; + } + // callbackUpdateLoadingMessage("
Failed to convert the file. "+ + // "Ontology could not be loaded.
Is it a valid OWL ontology? Please check with OWL Validator"); + if ( error !== null && error.status === 500 ) { + append_message("Could not convert direct input"); + } + if ( request && request.responseText.length === 0 ) { + append_message("Received empty graph"); + } + + graph.handleOnLoadingError(); + ontologyMenu.conversionFinished(); + } + + ontologyMenu.callbackLoadFromOntology = function ( selectedFile, filename, local_threadId ){ + callbackLoadFromOntology(selectedFile, filename, local_threadId); + }; + + function callbackLoadFromOntology( selectedFile, filename, local_threadId ){ + stopTimer = false; + timedLoadingStatusLogger(); + + var formData = new FormData(); + formData.append("ontology", selectedFile); + formData.append("sessionId", local_threadId); + var xhr = new XMLHttpRequest(); + + xhr.open("POST", "convert", true); + xhr.onload = function (){ + clearTimeout(loadingStatusTimer); + stopTimer = true; + console.log(xhr); + getLoadingStatusOnceCallBacked(callbackForConvert, [xhr, filename, local_threadId]); + }; + timedLoadingStatusLogger(); + xhr.send(formData); + } + + function callbackForConvert( parameter ){ + var xhr = parameter[0]; + var filename = parameter[1]; + var local_threadId = parameter[2]; + if ( local_threadId !== conversion_sessionId ) { + console.log("The conversion process for file:" + filename + " has been canceled!"); + ontologyMenu.conversionFinished(local_threadId); + return; + } + if ( xhr.status === 200 ) { + loadingModule.loadFromOWL2VOWL(xhr.responseText, filename); + ontologyMenu.conversionFinished(); + } else { + var uglyJson=xhr.responseText; + var jsonResut=JSON.parse(uglyJson); + var niceJSON=JSON.stringify(jsonResut, 'null', ' '); + niceJSON= niceJSON.replace(new RegExp('\r?\n','g'), '
'); + callbackUpdateLoadingMessage("Failed to convert the file. " + + "
Server answer:
"+ + "
"+niceJSON+ "
"+ + "Ontology could not be loaded.
Is it a valid OWL ontology? Please check with OWL Validator"); + + graph.handleOnLoadingError(); + ontologyMenu.conversionFinished(); + } + } + + ontologyMenu.conversionFinished = function ( id ){ + var local_id = conversion_sessionId; + if ( id ) { + local_id = id; + } + d3.xhr("conversionDone?sessionId=" + local_id, "application/text", function ( error, request ){ + if ( error ) { + console.log("ontologyMenu conversionFinished throws error"); + console.log("---------Error -----------"); + console.log(error); + console.log("---------Request -----------"); + console.log(request); + } + }); + }; + + function keepOntologySelectionOpenShortly(){ + // Events in the menu should not be considered + var ontologySelection = d3.select("#select .toolTipMenu"); + ontologySelection.on("click", function (){ + d3.event.stopPropagation(); + }).on("keydown", function (){ + d3.event.stopPropagation(); + }); + + ontologySelection.style("display", "block"); + + function disableKeepingOpen(){ + ontologySelection.style("display", undefined); + + clearTimeout(ontologyMenuTimeout); + d3.select(window).on("click", undefined).on("keydown", undefined); + ontologySelection.on("mouseover", undefined); + } + + // Clear the timeout to handle fast calls of this function + clearTimeout(ontologyMenuTimeout); + ontologyMenuTimeout = setTimeout(function (){ + disableKeepingOpen(); + }, 3000); + + // Disable forced open selection on interaction + d3.select(window).on("click", function (){ + disableKeepingOpen(); + }).on("keydown", function (){ + disableKeepingOpen(); + }); + + ontologySelection.on("mouseover", function (){ + disableKeepingOpen(); + }); + } + + ontologyMenu.showLoadingStatus = function ( visible ){ + if ( visible === true ) { + displayLoadingIndicators(); + } + else { + hideLoadingInformations(); + } + }; + + function displayLoadingIndicators(){ + d3.select("#layoutLoadingProgressBarContainer").classed("hidden", false); + loadingInfo.classed("hidden", false); + loadingProgress.classed("hidden", false); + } + + function hideLoadingInformations(){ + loadingInfo.classed("hidden", true); + } + + return ontologyMenu; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), + +/***/ 330: +/***/ (function(module, exports, __webpack_require__) { + + var toString = __webpack_require__(219), + unescapeHtmlChar = __webpack_require__(331); + + /** Used to match HTML entities and HTML characters. */ + var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g, + reHasEscapedHtml = RegExp(reEscapedHtml.source); + + /** + * The inverse of `_.escape`; this method converts the HTML entities + * `&`, `<`, `>`, `"`, and `'` in `string` to + * their corresponding characters. + * + * **Note:** No other HTML entities are unescaped. To unescape additional + * HTML entities use a third-party library like [_he_](https://mths.be/he). + * + * @static + * @memberOf _ + * @since 0.6.0 + * @category String + * @param {string} [string=''] The string to unescape. + * @returns {string} Returns the unescaped string. + * @example + * + * _.unescape('fred, barney, & pebbles'); + * // => 'fred, barney, & pebbles' + */ + function unescape(string) { + string = toString(string); + return (string && reHasEscapedHtml.test(string)) + ? string.replace(reEscapedHtml, unescapeHtmlChar) + : string; + } + + module.exports = unescape; + + +/***/ }), + +/***/ 331: +/***/ (function(module, exports, __webpack_require__) { + + var basePropertyOf = __webpack_require__(332); + + /** Used to map HTML entities to characters. */ + var htmlUnescapes = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + ''': "'" + }; + + /** + * Used by `_.unescape` to convert HTML entities to characters. + * + * @private + * @param {string} chr The matched character to unescape. + * @returns {string} Returns the unescaped character. + */ + var unescapeHtmlChar = basePropertyOf(htmlUnescapes); + + module.exports = unescapeHtmlChar; + + +/***/ }), + +/***/ 332: +/***/ (function(module, exports) { + + /** + * The base implementation of `_.propertyOf` without support for deep paths. + * + * @private + * @param {Object} object The object to query. + * @returns {Function} Returns the new accessor function. + */ + function basePropertyOf(object) { + return function(key) { + return object == null ? undefined : object[key]; + }; + } + + module.exports = basePropertyOf; + + +/***/ }), + +/***/ 333: +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {/** + * Contains the logic for the pause and resume button. + * + * @param graph the associated webvowl graph + * @returns {{}} + */ + module.exports = function ( graph ){ + + var pauseMenu = {}, + pauseButton; + + + /** + * Adds the pause button to the website. + */ + pauseMenu.setup = function (){ + var menuEntry = d3.select("#pauseOption"); + menuEntry.on("mouseover", function (){ + var searchMenu = graph.options().searchMenu(); + searchMenu.hideSearchEntries(); + }); + pauseButton = d3.select("#pause-button") + .datum({ paused: false }) + .on("click", function ( d ){ + graph.paused(!d.paused); + d.paused = !d.paused; + updatePauseButton(); + pauseButton.classed("highlighted", d.paused); + }); + // Set these properties the first time manually + updatePauseButton(); + }; + + pauseMenu.setPauseValue = function ( value ){ + pauseButton.datum().paused = value; + graph.paused(value); + pauseButton.classed("highlighted", value); + updatePauseButton(); + }; + + function updatePauseButton(){ + updatePauseButtonClass(); + updatePauseButtonText(); + } + + function updatePauseButtonClass(){ + pauseButton.classed("paused", function ( d ){ + return d.paused; + }); + } + + function updatePauseButtonText(){ + if ( pauseButton.datum().paused ) { + pauseButton.text("Resume"); + } else { + pauseButton.text("Pause"); + } + } + + pauseMenu.reset = function (){ + // resuming + pauseMenu.setPauseValue(false); + }; + + + return pauseMenu; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), + +/***/ 334: +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {/** + * Contains the logic for the reset button. + * + * @param graph the associated webvowl graph + * @returns {{}} + */ + module.exports = function ( graph ){ + + var resetMenu = {}, + options = graph.graphOptions(), + resettableModules, + untouchedOptions = webvowl.options(); + + + /** + * Adds the reset button to the website. + * @param _resettableModules modules that can be resetted + */ + resetMenu.setup = function ( _resettableModules ){ + resettableModules = _resettableModules; + d3.select("#reset-button").on("click", resetGraph); + var menuEntry = d3.select("#resetOption"); + menuEntry.on("mouseover", function (){ + var searchMenu = graph.options().searchMenu(); + searchMenu.hideSearchEntries(); + }); + }; + + function resetGraph(){ + graph.resetSearchHighlight(); + graph.options().searchMenu().clearText(); + options.classDistance(untouchedOptions.classDistance()); + options.datatypeDistance(untouchedOptions.datatypeDistance()); + options.charge(untouchedOptions.charge()); + options.gravity(untouchedOptions.gravity()); + options.linkStrength(untouchedOptions.linkStrength()); + graph.reset(); + + resettableModules.forEach(function ( module ){ + module.reset(); + }); + + graph.updateStyle(); + } + + + return resetMenu; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), + +/***/ 335: +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {/** + * Contains the search "engine" + * + * @param graph the associated webvowl graph + * @returns {{}} + */ + module.exports = function ( graph ){ + var searchMenu = {}, + dictionary = [], + entryNames = [], + searchLineEdit, + mergedStringsList, + mergedIdList, + maxEntries = 6, + dictionaryUpdateRequired = true, + labelDictionary, + inputText, + viewStatusOfSearchEntries = false; + + var results = []; + var resultID = []; + var c_locate = d3.select("#locateSearchResult"); + var c_search = d3.select("#c_search"); + var m_search = d3.select("#m_search"); // << dropdown container; + + + String.prototype.beginsWith = function ( string ){ + return (this.indexOf(string) === 0); + }; + + searchMenu.requestDictionaryUpdate = function (){ + dictionaryUpdateRequired = true; + // clear possible pre searched entries + var htmlCollection = m_search.node().children; + var numEntries = htmlCollection.length; + + for ( var i = 0; i < numEntries; i++ ) + htmlCollection[0].remove(); + searchLineEdit.node().value = ""; + }; + + + function updateSearchDictionary(){ + labelDictionary = graph.getUpdateDictionary(); + dictionaryUpdateRequired = false; + dictionary = []; + entryNames = []; + var idList = []; + var stringList = []; + + var i; + for ( i = 0; i < labelDictionary.length; i++ ) { + var lEntry = labelDictionary[i].labelForCurrentLanguage(); + idList.push(labelDictionary[i].id()); + stringList.push(lEntry); + // add all equivalents to the search space; + if ( labelDictionary[i].equivalents && labelDictionary[i].equivalents().length > 0 ) { + var eqs = labelDictionary[i].equivalentsString(); + var eqsLabels = eqs.split(", "); + for ( var e = 0; e < eqsLabels.length; e++ ) { + idList.push(labelDictionary[i].id()); + stringList.push(eqsLabels[e]); + } + } + } + + mergedStringsList = []; + mergedIdList = []; + var indexInStringList = -1; + var currentString; + var currentObjectId; + + for ( i = 0; i < stringList.length; i++ ) { + if ( i === 0 ) { + // just add the elements + mergedStringsList.push(stringList[i]); + mergedIdList.push([]); + mergedIdList[0].push(idList[i]); + continue; + } + else { + currentString = stringList[i]; + currentObjectId = idList[i]; + indexInStringList = mergedStringsList.indexOf(currentString); + } + if ( indexInStringList === -1 ) { + mergedStringsList.push(stringList[i]); + mergedIdList.push([]); + var lastEntry = mergedIdList.length; + mergedIdList[lastEntry - 1].push(currentObjectId); + } else { + mergedIdList[indexInStringList].push(currentObjectId); + } + } + + for ( i = 0; i < mergedStringsList.length; i++ ) { + var aString = mergedStringsList[i]; + var correspondingIdList = mergedIdList[i]; + var idListResult = "[ "; + for ( var j = 0; j < correspondingIdList.length; j++ ) { + idListResult = idListResult + correspondingIdList[j].toString(); + idListResult = idListResult + ", "; + } + idListResult = idListResult.substring(0, idListResult.length - 2); + idListResult = idListResult + " ]"; + + dictionary.push(aString); + entryNames.push(aString); + } + } + + searchMenu.setup = function (){ + // clear dictionary; + dictionary = []; + searchLineEdit = d3.select("#search-input-text"); + searchLineEdit.on("input", userInput); + searchLineEdit.on("keydown", userNavigation); + searchLineEdit.on("click", toggleSearchEntryView); + searchLineEdit.on("mouseover", hoverSearchEntryView); + + c_locate.on("click", function (){ + graph.locateSearchResult(); + }); + + c_locate.on("mouseover", function (){ + searchMenu.hideSearchEntries(); + }); + + }; + + function hoverSearchEntryView(){ + updateSelectionStatusFlags(); + searchMenu.showSearchEntries(); + } + + function toggleSearchEntryView(){ + if ( viewStatusOfSearchEntries ) { + searchMenu.hideSearchEntries(); + } else { + searchMenu.showSearchEntries(); + } + } + + searchMenu.hideSearchEntries = function (){ + m_search.style("display", "none"); + viewStatusOfSearchEntries = false; + }; + + searchMenu.showSearchEntries = function (){ + m_search.style("display", "block"); + viewStatusOfSearchEntries = true; + }; + + function ValidURL( str ){ + var urlregex = /^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/; + return urlregex.test(str); + + } + + + function updateSelectionStatusFlags(){ + if ( searchLineEdit.node().value.length === 0 ) { + createSearchEntries(); + return; + } + handleAutoCompletion(); + } + + function userNavigation(){ + if ( dictionaryUpdateRequired ) { + updateSearchDictionary(); + } + + var htmlCollection = m_search.node().children; + var numEntries = htmlCollection.length; + + + var move = 0; + var i; + var selectedEntry = -1; + for ( i = 0; i < numEntries; i++ ) { + var atr = htmlCollection[i].getAttribute('class'); + if ( atr === "dbEntrySelected" ) { + selectedEntry = i; + } + } + if ( d3.event.keyCode === 13 ) { + if ( selectedEntry >= 0 && selectedEntry < numEntries ) { + // simulate onClick event + htmlCollection[selectedEntry].onclick(); + searchMenu.hideSearchEntries(); + } + else if ( numEntries === 0 ) { + inputText = searchLineEdit.node().value; + // check if input text ends or begins with with space + // remove first spaces + var clearedText = inputText.replace(/%20/g, " "); + while ( clearedText.beginsWith(" ") ) { + clearedText = clearedText.substr(1, clearedText.length); + } + // remove ending spaces + while ( clearedText.endsWith(" ") ) { + clearedText = clearedText.substr(0, clearedText.length - 1); + } + var iri = clearedText.replace(/ /g, "%20"); + + var valid = ValidURL(iri); + // validate url: + if ( valid ) { + var ontM = graph.options().ontologyMenu(); + ontM.setIriText(iri); + searchLineEdit.node().value = ""; + } + else { + console.log(iri + " is not a valid URL!"); + } + } + } + if ( d3.event.keyCode === 38 ) { + move = -1; + searchMenu.showSearchEntries(); + } + if ( d3.event.keyCode === 40 ) { + move = +1; + searchMenu.showSearchEntries(); + } + + var newSelection = selectedEntry + move; + if ( newSelection !== selectedEntry ) { + + if ( newSelection < 0 && selectedEntry <= 0 ) { + htmlCollection[0].setAttribute('class', "dbEntrySelected"); + } + + if ( newSelection >= numEntries ) { + htmlCollection[selectedEntry].setAttribute('class', "dbEntrySelected"); + } + if ( newSelection >= 0 && newSelection < numEntries ) { + htmlCollection[newSelection].setAttribute('class', "dbEntrySelected"); + if ( selectedEntry >= 0 ) + htmlCollection[selectedEntry].setAttribute('class', "dbEntry"); + } + } + } + + searchMenu.getSearchString = function (){ + return searchLineEdit.node().value; + }; + + + function clearSearchEntries(){ + var htmlCollection = m_search.node().children; + var numEntries = htmlCollection.length; + for ( var i = 0; i < numEntries; i++ ) { + htmlCollection[0].remove(); + } + results = []; + resultID = []; + + } + + function createSearchEntries(){ + inputText = searchLineEdit.node().value; + var i; + var lc_text = inputText.toLowerCase(); + var token; + + for ( i = 0; i < dictionary.length; i++ ) { + var tokenElement = dictionary[i]; + if ( tokenElement === undefined ) { + //@WORKAROUND : nodes with undefined labels are skipped + //@FIX: these nodes are now not added to the dictionary + continue; + } + token = dictionary[i].toLowerCase(); + if ( token.indexOf(lc_text) > -1 ) { + results.push(dictionary[i]); + resultID.push(i); + } + } + } + + function measureTextWidth( text, textStyle ){ + // Set a default value + if ( !textStyle ) { + textStyle = "text"; + } + var d = d3.select("body") + .append("div") + .attr("class", textStyle) + .attr("id", "width-test") // tag this element to identify it + .attr("style", "position:absolute; float:left; white-space:nowrap; visibility:hidden;") + .text(text), + w = document.getElementById("width-test").offsetWidth; + d.remove(); + return w; + } + + function cropText( input ){ + var maxWidth = 250; + var textStyle = "dbEntry"; + var truncatedText = input; + var textWidth; + var ratio; + var newTruncatedTextLength; + while ( true ) { + textWidth = measureTextWidth(truncatedText, textStyle); + if ( textWidth <= maxWidth ) { + break; + } + + ratio = textWidth / maxWidth; + newTruncatedTextLength = Math.floor(truncatedText.length / ratio); + + // detect if nothing changes + if ( truncatedText.length === newTruncatedTextLength ) { + break; + } + + truncatedText = truncatedText.substring(0, newTruncatedTextLength); + } + + if ( input.length > truncatedText.length ) { + return input.substring(0, truncatedText.length - 6); + } + return input; + } + + function createDropDownElements(){ + var numEntries; + var copyRes = results; + var i; + var token; + var newResults = []; + var newResultsIds = []; + + var lc_text = searchLineEdit.node().value.toLowerCase(); + // set the number of shown results to be maxEntries or less; + numEntries = results.length; + if ( numEntries > maxEntries ) + numEntries = maxEntries; + + + for ( i = 0; i < numEntries; i++ ) { + // search for the best entry + var indexElement = 1000000; + var lengthElement = 1000000; + var bestElement = -1; + for ( var j = 0; j < copyRes.length; j++ ) { + token = copyRes[j].toLowerCase(); + var tIe = token.indexOf(lc_text); + var tLe = token.length; + if ( tIe > -1 && tIe <= indexElement && tLe <= lengthElement ) { + bestElement = j; + indexElement = tIe; + lengthElement = tLe; + } + } + newResults.push(copyRes[bestElement]); + newResultsIds.push(resultID[bestElement]); + copyRes[bestElement] = ""; + } + + // add the results to the entry menu + //****************************************** + numEntries = results.length; + if ( numEntries > maxEntries ) + numEntries = maxEntries; + + var filteredOutElements = 0; + for ( i = 0; i < numEntries; i++ ) { + //add results to the dropdown menu + var testEntry = document.createElement('li'); + testEntry.setAttribute('elementID', newResultsIds[i]); + testEntry.onclick = handleClick(newResultsIds[i]); + testEntry.setAttribute('class', "dbEntry"); + + var entries = mergedIdList[newResultsIds[i]]; + var eLen = entries.length; + + var croppedText = cropText(newResults[i]); + + var el0 = entries[0]; + var allSame = true; + var nodeMap = graph.getNodeMapForSearch(); + var visible = eLen; + if ( eLen > 1 ) { + for ( var q = 0; q < eLen; q++ ) { + if ( nodeMap[entries[q]] === undefined ) { + visible--; + } + } + } + + for ( var a = 0; a < eLen; a++ ) { + if ( el0 !== entries[a] ) { + allSame = false; + } + } + if ( croppedText !== newResults[i] ) { + // append ...(#numElements) if needed + if ( eLen > 1 && allSame === false ) { + if ( eLen !== visible ) + croppedText += "... (" + visible + "/" + eLen + ")"; + } + else { + croppedText += "..."; + } + testEntry.title = newResults[i]; + } + else { + if ( eLen > 1 && allSame === false ) { + if ( eLen !== visible ) + croppedText += " (" + visible + "/" + eLen + ")"; + else + croppedText += " (" + eLen + ")"; + } + } + + var searchEntryNode = d3.select(testEntry); + if ( eLen === 1 || allSame === true ) { + if ( nodeMap[entries[0]] === undefined ) { + searchEntryNode.style("color", "#979797"); + testEntry.title = newResults[i] + "\nElement is filtered out."; + testEntry.onclick = function (){ + }; + d3.select(testEntry).style("cursor", "default"); + filteredOutElements++; + } + } else { + if ( visible < 1 ) { + searchEntryNode.style("color", "#979797"); + testEntry.onclick = function (){ + }; + testEntry.title = newResults[i] + "\nAll elements are filtered out."; + d3.select(testEntry).style("cursor", "default"); + filteredOutElements++; + } else { + searchEntryNode.style("color", ""); + } + if ( visible < eLen && visible > 1 ) { + testEntry.title = newResults[i] + "\n" + visible + "/" + eLen + " elements are visible."; + } + } + searchEntryNode.node().innerHTML = croppedText; + m_search.node().appendChild(testEntry); + } + } + + + function handleAutoCompletion(){ + /** pre condition: autoCompletion has already a valid text**/ + clearSearchEntries(); + createSearchEntries(); + createDropDownElements(); + } + + function userInput(){ + c_locate.classed("highlighted", false); + c_locate.node().title = "Nothing to locate"; + + if ( dictionaryUpdateRequired ) { + updateSearchDictionary(); + } + graph.resetSearchHighlight(); + + if ( dictionary.length === 0 ) { + console.log("dictionary is empty"); + return; + } + inputText = searchLineEdit.node().value; + + clearSearchEntries(); + if ( inputText.length !== 0 ) { + createSearchEntries(); + createDropDownElements(); + } + + searchMenu.showSearchEntries(); + } + + function handleClick( elementId ){ + + return function (){ + var id = elementId; + var correspondingIds = mergedIdList[id]; + + // autoComplete the text for the user + var autoComStr = entryNames[id]; + searchLineEdit.node().value = autoComStr; + + graph.resetSearchHighlight(); + graph.highLightNodes(correspondingIds); + c_locate.node().title = "Locate search term"; + if ( autoComStr !== inputText ) { + handleAutoCompletion(); + } + searchMenu.hideSearchEntries(); + }; + } + + searchMenu.clearText = function (){ + searchLineEdit.node().value = ""; + c_locate.classed("highlighted", false); + c_locate.node().title = "Nothing to locate"; + var htmlCollection = m_search.node().children; + var numEntries = htmlCollection.length; + for ( var i = 0; i < numEntries; i++ ) { + htmlCollection[0].remove(); + } + }; + + return searchMenu; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), + +/***/ 336: +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {/** + * Contains the navigation "engine" + * + * @param graph the associated webvowl graph + * @returns {{}} + */ + module.exports = function ( graph ){ + var navigationMenu = {}, + scrollContainer = d3.select("#menuElementContainer").node(), + menuContainer = d3.select("#menuContainer").node(), + leftButton = d3.select("#scrollLeftButton"), + rightButton = d3.select("#scrollRightButton"), + scrolLeftValue, + scrollMax, + currentlyVisibleMenu, + currentlyHoveredEntry, + touchedElement = false, + t_scrollLeft, + t_scrollRight, + c_select = [], + m_select = []; + + + function clearAllTimers(){ + cancelAnimationFrame(t_scrollLeft); + cancelAnimationFrame(t_scrollRight); + } + + function timed_scrollRight(){ + scrolLeftValue += 5; + scrollContainer.scrollLeft = scrolLeftValue; + navigationMenu.updateScrollButtonVisibility(); + if ( scrolLeftValue >= scrollMax ) { + clearAllTimers(); + return; + } + t_scrollRight = requestAnimationFrame(timed_scrollRight); + + } + + function timed_scrollLeft(){ + scrolLeftValue -= 5; + scrollContainer.scrollLeft = scrolLeftValue; + navigationMenu.updateScrollButtonVisibility(); + if ( scrolLeftValue <= 0 ) { + clearAllTimers(); + return; + } + t_scrollRight = requestAnimationFrame(timed_scrollLeft); + } + + // collect all menu entries and stuff; + function setupControlsAndMenus(){ + // HEURISTIC : to match the menus and their controllers we remove the first 2 letters and match + c_select = []; + m_select = []; + + var c_temp = []; + var m_temp = []; + var i; + var controlElements = scrollContainer.children; + var numEntries = controlElements.length; + + for ( i = 0; i < numEntries; i++ ) { + c_temp.push(controlElements[i].id.slice(2)); + } + + var menuElements = menuContainer.children; + numEntries = menuElements.length; + for ( i = 0; i < numEntries; i++ ) { + m_temp.push(menuElements[i].id.slice(2)); + } + + numEntries = controlElements.length; + for ( i = 0; i < numEntries; i++ ) { + c_select[i] = "c_" + c_temp[i]; + if ( m_temp.indexOf(c_temp[i]) > -1 ) { + m_select[i] = "m_" + c_temp[i]; + } else { + m_select[i] = undefined; + } + // create custom behavior for click, touch, and hover + d3.select("#" + c_select[i]).on("mouseover", menuElementOnHovered); + d3.select("#" + c_select[i]).on("mouseout", menuElementOutHovered); + + d3.select("#" + c_select[i]).on("click", menuElementClicked); + d3.select("#" + c_select[i]).on("touchstart", menuElementTouched); + + } + + // connect to mouseWheel + d3.select("#menuElementContainer").on("wheel", function (){ + var wheelEvent = d3.event; + var offset; + if ( wheelEvent.deltaY < 0 ) offset = 20; + if ( wheelEvent.deltaY > 0 ) offset = -20; + scrollContainer.scrollLeft += offset; + navigationMenu.hideAllMenus(); + navigationMenu.updateScrollButtonVisibility(); + }); + + // connect scrollIndicator Buttons; + d3.select("#scrollRightButton").on("mousedown", function (){ + scrolLeftValue = scrollContainer.scrollLeft; + navigationMenu.hideAllMenus(); + t_scrollRight = requestAnimationFrame(timed_scrollRight); + + }).on("touchstart", function (){ + scrolLeftValue = scrollContainer.scrollLeft; + navigationMenu.hideAllMenus(); + t_scrollRight = requestAnimationFrame(timed_scrollRight); + }).on("mouseup", clearAllTimers) + .on("touchend", clearAllTimers) + .on("touchcancel", clearAllTimers); + + d3.select("#scrollLeftButton").on("mousedown", function (){ + scrolLeftValue = scrollContainer.scrollLeft; + navigationMenu.hideAllMenus(); + t_scrollLeft = requestAnimationFrame(timed_scrollLeft); + }).on("touchstart", function (){ + scrolLeftValue = scrollContainer.scrollLeft; + navigationMenu.hideAllMenus(); + t_scrollLeft = requestAnimationFrame(timed_scrollLeft); + }).on("mouseup", clearAllTimers) + .on("touchend", clearAllTimers) + .on("touchcancel", clearAllTimers); + + // connect the scroll functionality; + d3.select("#menuElementContainer").on("scroll", function (){ + navigationMenu.updateScrollButtonVisibility(); + navigationMenu.hideAllMenus(); + }); + } + + function menuElementOnHovered(){ + navigationMenu.hideAllMenus(); + if ( touchedElement ) { + return; + } + showSingleMenu(this.id); + } + + function menuElementOutHovered(){ + hoveroutedControMenu(this.id); + } + + function menuElementClicked(){ + var m_element = m_select[c_select.indexOf(this.id)]; + if ( m_element ) { + var menuElement = d3.select("#" + m_element); + if ( menuElement ) { + if ( menuElement.style("display") === "block" ) { + menuElement.style("display", "none");// hide it + } else { + showSingleMenu(this.id); + } + } + } + } + + function menuElementTouched(){ + // it sets a flag that we have touched it, + // since d3. propagates the event for touch as hover and then click, we block the hover event + touchedElement = true; + } + + + function hoveroutedControMenu( controllerID ){ + currentlyHoveredEntry = d3.select("#" + controllerID); + if ( controllerID !== "c_search" ) { + d3.select("#" + controllerID).select("path").style("stroke-width", "0"); + d3.select("#" + controllerID).select("path").style("fill", "#fff"); + } + + } + + function showSingleMenu( controllerID ){ + currentlyHoveredEntry = d3.select("#" + controllerID).node(); + // get the corresponding menu element for this controller + var m_element = m_select[c_select.indexOf(controllerID)]; + if ( m_element ) { + if ( controllerID !== "c_search" ) { + + d3.select("#" + controllerID).select("path").style("stroke-width", "0"); + d3.select("#" + controllerID).select("path").style("fill", "#bdc3c7"); + } + // show it if we have a menu + currentlyVisibleMenu = d3.select("#" + m_element); + currentlyVisibleMenu.style("display", "block"); + if ( m_element === "m_export" ) + graph.options().exportMenu().exportAsUrl(); + updateMenuPosition(); + } + } + + function updateMenuPosition(){ + if ( currentlyHoveredEntry ) { + var leftOffset = currentlyHoveredEntry.offsetLeft; + var scrollOffset = scrollContainer.scrollLeft; + var totalOffset = leftOffset - scrollOffset; + var finalOffset = Math.max(0, totalOffset); + var fullContainer_width = scrollContainer.getBoundingClientRect().width; + var elementWidth = currentlyVisibleMenu.node().getBoundingClientRect().width; + // make priority > first check if we are right + if ( finalOffset + elementWidth > fullContainer_width ) { + finalOffset = fullContainer_width - elementWidth; + } + // fix priority; + finalOffset = Math.max(0, finalOffset); + currentlyVisibleMenu.style("left", finalOffset + "px"); + + // // check if outside the viewport + // var menuWidth=currentlyHoveredEntry.getBoundingClientRect().width; + // var bt_width=36; + // if (totalOffset+menuWidthfullContainer_width){ + // navigationMenu.hideAllMenus(); + // currentlyHoveredEntry=undefined; + // } + } + } + + navigationMenu.hideAllMenus = function (){ + d3.selectAll(".toolTipMenu").style("display", "none"); // hiding all menus + }; + + navigationMenu.updateScrollButtonVisibility = function (){ + scrollMax = scrollContainer.scrollWidth - scrollContainer.clientWidth - 2; + if ( scrollContainer.scrollLeft === 0 ) { + leftButton.classed("hidden", true); + } else { + leftButton.classed("hidden", false); + } + + if ( scrollContainer.scrollLeft > scrollMax ) { + rightButton.classed("hidden", true); + } else { + rightButton.classed("hidden", false); + } + + }; + + navigationMenu.setup = function (){ + setupControlsAndMenus(); + // make sure that the menu elements follow their controller and also their restrictions + // some hovering behavior -- lets the menu disappear when hovered in graph or sidebar; + d3.select("#graph").on("mouseover", function (){ + navigationMenu.hideAllMenus(); + }); + d3.select("#generalDetails").on("mouseover", function (){ + navigationMenu.hideAllMenus(); + }); + }; + + return navigationMenu; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), + +/***/ 337: +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {/** The zoom Slider **/ + module.exports = function ( graph ){ + var zoomSlider = {}; + var minMag = graph.options().minMagnification(), + maxMag = graph.options().maxMagnification(), + defZoom, + t_zoomOut, + t_zoomIn, + zoomValue, + showSlider = true, + w = graph.options().width(), + h = graph.options().height(), + slider; + + defZoom = Math.min(w, h) / 1000; + + function clearAllTimers(){ + cancelAnimationFrame(t_zoomOut); + cancelAnimationFrame(t_zoomIn); + } + + function timed_zoomOut(){ + zoomValue = 0.98 * zoomValue; + // fail saves + if ( zoomValue < minMag ) { + zoomValue = minMag; + } + graph.setSliderZoom(zoomValue); + t_zoomOut = requestAnimationFrame(timed_zoomOut); + } + + function timed_zoomIn(){ + zoomValue = 1.02 * zoomValue; + // fail saves + if ( zoomValue > maxMag ) { + zoomValue = maxMag; + } + graph.setSliderZoom(zoomValue); + t_zoomIn = requestAnimationFrame(timed_zoomIn); + } + + zoomSlider.setup = function (){ + slider = d3.select("#zoomSliderParagraph").append("input") + .datum({}) + .attr("id", "zoomSliderElement") + .attr("type", "range") + .attr("value", defZoom) + .attr("min", minMag) + .attr("max", maxMag) + .attr("step", (maxMag - minMag) / 40) + .attr("title", "zoom factor") + .on("input", function (){ + zoomSlider.zooming(); + }); + + d3.select("#zoomOutButton").on("mousedown", function (){ + graph.options().navigationMenu().hideAllMenus(); + zoomValue = graph.scaleFactor(); + t_zoomOut = requestAnimationFrame(timed_zoomOut); + }) + .on("touchstart", function (){ + graph.options().navigationMenu().hideAllMenus(); + zoomValue = graph.scaleFactor(); + t_zoomOut = requestAnimationFrame(timed_zoomOut); + }) + .on("mouseup", clearAllTimers) + .on("touchend", clearAllTimers) + .on("touchcancel", clearAllTimers) + .attr("title", "zoom out"); + + d3.select("#zoomInButton").on("mousedown", function (){ + graph.options().navigationMenu().hideAllMenus(); + zoomValue = graph.scaleFactor(); + t_zoomIn = requestAnimationFrame(timed_zoomIn); + }) + .on("touchstart", function (){ + graph.options().navigationMenu().hideAllMenus(); + zoomValue = graph.scaleFactor(); + t_zoomIn = requestAnimationFrame(timed_zoomIn); + }) + .on("mouseup", clearAllTimers) + .on("touchend", clearAllTimers) + .on("touchcancel", clearAllTimers) + .attr("title", "zoom in"); + + d3.select("#centerGraphButton").on("click", function (){ + graph.options().navigationMenu().hideAllMenus(); + graph.forceRelocationEvent(); + }).attr("title", "center graph"); + + }; + + zoomSlider.showSlider = function ( val ){ + if ( !arguments.length ) return showSlider; + d3.select("#zoomSlider").classed("hidden", !val); + showSlider = val; + }; + + zoomSlider.zooming = function (){ + graph.options().navigationMenu().hideAllMenus(); + var zoomValue = slider.property("value"); + slider.attr("value", zoomValue); + graph.setSliderZoom(zoomValue); + }; + + zoomSlider.updateZoomSliderValue = function ( val ){ + if ( slider ) { + slider.attr("value", val); + slider.property("value", val); + } + }; + + return zoomSlider; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), + +/***/ 338: +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {/** + * Contains the logic for the sidebar. + * @param graph the graph that belongs to these controls + * @returns {{}} + */ + module.exports = function ( graph ){ + + var sidebar = {}, + languageTools = webvowl.util.languageTools(), + elementTools = webvowl.util.elementTools(), + // Required for reloading when the language changes + ontologyInfo, + visibleSidebar = 1, + lastSelectedElement, + + detailArea = d3.select("#detailsArea"), + graphArea = d3.select("#canvasArea"), + menuArea = d3.select("#swipeBarContainer"), + collapseButton = d3.select("#sidebarExpandButton"); + + /** + * Setup the menu bar. + */ + + + function setupCollapsing(){ + // adapted version of this example: http://www.normansblog.de/simple-jquery-accordion/ + function collapseContainers( containers ){ + containers.classed("hidden", true); + } + + function expandContainers( containers ){ + containers.classed("hidden", false); + } + + var triggers = d3.selectAll(".accordion-trigger"); + + // Collapse all inactive triggers on startup + collapseContainers(d3.selectAll(".accordion-trigger:not(.accordion-trigger-active) + div")); + + triggers.on("click", function (){ + var selectedTrigger = d3.select(this), + activeTriggers = d3.selectAll(".accordion-trigger-active"); + + if ( selectedTrigger.classed("accordion-trigger-active") ) { + // Collapse the active (which is also the selected) trigger + collapseContainers(d3.select(selectedTrigger.node().nextElementSibling)); + selectedTrigger.classed("accordion-trigger-active", false); + } else { + // Collapse the other trigger ... + collapseContainers(d3.selectAll(".accordion-trigger-active + div")); + activeTriggers.classed("accordion-trigger-active", false); + // ... and expand the selected one + expandContainers(d3.select(selectedTrigger.node().nextElementSibling)); + selectedTrigger.classed("accordion-trigger-active", true); + } + }); + } + + sidebar.clearOntologyInformation = function (){ + + d3.select("#title").text("No title available"); + d3.select("#about").attr("href", "#").attr("target", "_blank").text("not given"); + d3.select("#version").text("--"); + d3.select("#authors").text("--"); + d3.select("#description").text("No description available."); + var container = d3.select("#ontology-metadata"); + container.selectAll("*").remove(); + d3.select("#classCount") + .text("0"); + d3.select("#objectPropertyCount") + .text("0"); + d3.select("#datatypePropertyCount") + .text("0"); + d3.select("#individualCount") + .text("0"); + d3.select("#nodeCount") + .text("0"); + d3.select("#edgeCount") + .text("0"); + + // clear selectedNode info + var isTriggerActive = d3.select("#selection-details-trigger").classed("accordion-trigger-active"); + if ( isTriggerActive ) { + // close accordion + d3.select("#selection-details-trigger").node().click(); + } + showSelectionAdvice(); + + }; + + /** + * Updates the information of the passed ontology. + * @param data the graph data + * @param statistics the statistics module + */ + sidebar.updateOntologyInformation = function ( data, statistics ){ + data = data || {}; + ontologyInfo = data.header || {}; + + updateGraphInformation(); + displayGraphStatistics(undefined, statistics); + displayMetadata(ontologyInfo.other); + + // Reset the sidebar selection + sidebar.updateSelectionInformation(undefined); + + setLanguages(ontologyInfo.languages); + }; + + function setLanguages( languages ){ + languages = languages || []; + + // Put the default and unset label on top of the selection labels + languages.sort(function ( a, b ){ + if ( a === webvowl.util.constants().LANG_IRIBASED ) { + return -1; + } else if ( b === webvowl.util.constants().LANG_IRIBASED ) { + return 1; + } + if ( a === webvowl.util.constants().LANG_UNDEFINED ) { + return -1; + } else if ( b === webvowl.util.constants().LANG_UNDEFINED ) { + return 1; + } + return a.localeCompare(b); + }); + + var languageSelection = d3.select("#language") + .on("change", function (){ + graph.language(d3.event.target.value); + updateGraphInformation(); + sidebar.updateSelectionInformation(lastSelectedElement); + }); + + languageSelection.selectAll("option").remove(); + languageSelection.selectAll("option") + .data(languages) + .enter().append("option") + .attr("value", function ( d ){ + return d; + }) + .text(function ( d ){ + return d; + }); + + if ( !trySelectDefaultLanguage(languageSelection, languages, "en") ) { + if ( !trySelectDefaultLanguage(languageSelection, languages, webvowl.util.constants().LANG_UNDEFINED) ) { + trySelectDefaultLanguage(languageSelection, languages, webvowl.util.constants().LANG_IRIBASED); + } + } + } + + function trySelectDefaultLanguage( selection, languages, language ){ + var langIndex = languages.indexOf(language); + if ( langIndex >= 0 ) { + selection.property("selectedIndex", langIndex); + graph.language(language); + return true; + } + + return false; + } + + function updateGraphInformation(){ + var title = languageTools.textInLanguage(ontologyInfo.title, graph.language()); + d3.select("#title").text(title || "No title available"); + d3.select("#about").attr("href", ontologyInfo.iri).attr("target", "_blank").text(ontologyInfo.iri); + d3.select("#version").text(ontologyInfo.version || "--"); + var authors = ontologyInfo.author; + if ( typeof authors === "string" ) { + // Stay compatible with author info as strings after change in january 2015 + d3.select("#authors").text(authors); + } else if ( authors instanceof Array ) { + d3.select("#authors").text(authors.join(", ")); + } else { + d3.select("#authors").text("--"); + } + + var description = languageTools.textInLanguage(ontologyInfo.description, graph.language()); + d3.select("#description").text(description || "No description available."); + } + + function displayGraphStatistics( deliveredMetrics, statistics ){ + // Metrics are optional and may be undefined + deliveredMetrics = deliveredMetrics || {}; + + d3.select("#classCount") + .text(deliveredMetrics.classCount || statistics.classCount()); + d3.select("#objectPropertyCount") + .text(deliveredMetrics.objectPropertyCount || statistics.objectPropertyCount()); + d3.select("#datatypePropertyCount") + .text(deliveredMetrics.datatypePropertyCount || statistics.datatypePropertyCount()); + d3.select("#individualCount") + .text(deliveredMetrics.totalIndividualCount || statistics.totalIndividualCount()); + d3.select("#nodeCount") + .text(statistics.nodeCount()); + d3.select("#edgeCount") + .text(statistics.edgeCount()); + } + + function displayMetadata( metadata ){ + var container = d3.select("#ontology-metadata"); + container.selectAll("*").remove(); + + listAnnotations(container, metadata); + + if ( container.selectAll(".annotation").size() <= 0 ) { + container.append("p").text("No annotations available."); + } + } + + function listAnnotations( container, annotationObject ){ + annotationObject = annotationObject || {}; //todo + + // Collect the annotations in an array for simpler processing + var annotations = []; + for ( var annotation in annotationObject ) { + if ( annotationObject.hasOwnProperty(annotation) ) { + annotations.push(annotationObject[annotation][0]); + } + } + + container.selectAll(".annotation").remove(); + container.selectAll(".annotation").data(annotations).enter().append("p") + .classed("annotation", true) + .classed("statisticDetails", true) + .text(function ( d ){ + return d.identifier + ":"; + }) + .append("span") + .each(function ( d ){ + appendIriLabel(d3.select(this), d.value, d.type === "iri" ? d.value : undefined); + }); + } + + /** + * Update the information of the selected node. + * @param selectedElement the selection or null if nothing is selected + */ + sidebar.updateSelectionInformation = function ( selectedElement ){ + lastSelectedElement = selectedElement; + + // Click event was prevented when dragging + if ( d3.event && d3.event.defaultPrevented ) { + return; + } + + var isTriggerActive = d3.select("#selection-details-trigger").classed("accordion-trigger-active"); + if ( selectedElement && !isTriggerActive ) { + d3.select("#selection-details-trigger").node().click(); + } else if ( !selectedElement && isTriggerActive ) { + showSelectionAdvice(); + return; + } + + if ( elementTools.isProperty(selectedElement) ) { + displayPropertyInformation(selectedElement); + } else if ( elementTools.isNode(selectedElement) ) { + displayNodeInformation(selectedElement); + } + }; + + function showSelectionAdvice(){ + setSelectionInformationVisibility(false, false, true); + } + + function setSelectionInformationVisibility( showClasses, showProperties, showAdvice ){ + d3.select("#classSelectionInformation").classed("hidden", !showClasses); + d3.select("#propertySelectionInformation").classed("hidden", !showProperties); + d3.select("#noSelectionInformation").classed("hidden", !showAdvice); + } + + function displayPropertyInformation( property ){ + showPropertyInformations(); + + setIriLabel(d3.select("#propname"), property.labelForCurrentLanguage(), property.iri()); + d3.select("#typeProp").text(property.type()); + + if ( property.inverse() !== undefined ) { + d3.select("#inverse").classed("hidden", false); + setIriLabel(d3.select("#inverse span"), property.inverse().labelForCurrentLanguage(), property.inverse().iri()); + } else { + d3.select("#inverse").classed("hidden", true); + } + + var equivalentIriSpan = d3.select("#propEquivUri"); + listNodeArray(equivalentIriSpan, property.equivalents()); + + listNodeArray(d3.select("#subproperties"), property.subproperties()); + listNodeArray(d3.select("#superproperties"), property.superproperties()); + + if ( property.minCardinality() !== undefined ) { + d3.select("#infoCardinality").classed("hidden", true); + d3.select("#minCardinality").classed("hidden", false); + d3.select("#minCardinality span").text(property.minCardinality()); + d3.select("#maxCardinality").classed("hidden", false); + + if ( property.maxCardinality() !== undefined ) { + d3.select("#maxCardinality span").text(property.maxCardinality()); + } else { + d3.select("#maxCardinality span").text("*"); + } + + } else if ( property.cardinality() !== undefined ) { + d3.select("#minCardinality").classed("hidden", true); + d3.select("#maxCardinality").classed("hidden", true); + d3.select("#infoCardinality").classed("hidden", false); + d3.select("#infoCardinality span").text(property.cardinality()); + } else { + d3.select("#infoCardinality").classed("hidden", true); + d3.select("#minCardinality").classed("hidden", true); + d3.select("#maxCardinality").classed("hidden", true); + } + + setIriLabel(d3.select("#domain"), property.domain().labelForCurrentLanguage(), property.domain().iri()); + setIriLabel(d3.select("#range"), property.range().labelForCurrentLanguage(), property.range().iri()); + + displayAttributes(property.attributes(), d3.select("#propAttributes")); + + setTextAndVisibility(d3.select("#propDescription"), property.descriptionForCurrentLanguage()); + setTextAndVisibility(d3.select("#propComment"), property.commentForCurrentLanguage()); + + listAnnotations(d3.select("#propertySelectionInformation"), property.annotations()); + } + + function showPropertyInformations(){ + setSelectionInformationVisibility(false, true, false); + } + + function setIriLabel( element, name, iri ){ + var parent = d3.select(element.node().parentNode); + + if ( name ) { + element.selectAll("*").remove(); + appendIriLabel(element, name, iri); + parent.classed("hidden", false); + } else { + parent.classed("hidden", true); + } + } + + function appendIriLabel( element, name, iri ){ + var tag; + + if ( iri ) { + tag = element.append("a") + .attr("href", iri) + .attr("title", iri) + .attr("target", "_blank"); + } else { + tag = element.append("span"); + } + tag.text(name); + } + + function displayAttributes( attributes, textSpan ){ + var spanParent = d3.select(textSpan.node().parentNode); + + if ( attributes && attributes.length > 0 ) { + // Remove redundant redundant attributes for sidebar + removeElementFromArray("object", attributes); + removeElementFromArray("datatype", attributes); + removeElementFromArray("rdf", attributes); + } + + if ( attributes && attributes.length > 0 ) { + textSpan.text(attributes.join(", ")); + + spanParent.classed("hidden", false); + } else { + spanParent.classed("hidden", true); + } + } + + function removeElementFromArray( element, array ){ + var index = array.indexOf(element); + if ( index > -1 ) { + array.splice(index, 1); + } + } + + function displayNodeInformation( node ){ + showClassInformations(); + + setIriLabel(d3.select("#name"), node.labelForCurrentLanguage(), node.iri()); + + /* Equivalent stuff. */ + var equivalentIriSpan = d3.select("#classEquivUri"); + listNodeArray(equivalentIriSpan, node.equivalents()); + + d3.select("#typeNode").text(node.type()); + listNodeArray(d3.select("#individuals"), node.individuals()); + + /* Disjoint stuff. */ + var disjointNodes = d3.select("#disjointNodes"); + var disjointNodesParent = d3.select(disjointNodes.node().parentNode); + + if ( node.disjointWith() !== undefined ) { + disjointNodes.selectAll("*").remove(); + + node.disjointWith().forEach(function ( element, index ){ + if ( index > 0 ) { + disjointNodes.append("span").text(", "); + } + appendIriLabel(disjointNodes, element.labelForCurrentLanguage(), element.iri()); + }); + + disjointNodesParent.classed("hidden", false); + } else { + disjointNodesParent.classed("hidden", true); + } + + displayAttributes(node.attributes(), d3.select("#classAttributes")); + + setTextAndVisibility(d3.select("#nodeDescription"), node.descriptionForCurrentLanguage()); + setTextAndVisibility(d3.select("#nodeComment"), node.commentForCurrentLanguage()); + + listAnnotations(d3.select("#classSelectionInformation"), node.annotations()); + } + + function showClassInformations(){ + setSelectionInformationVisibility(true, false, false); + } + + function listNodeArray( textSpan, nodes ){ + var spanParent = d3.select(textSpan.node().parentNode); + + if ( nodes && nodes.length ) { + textSpan.selectAll("*").remove(); + nodes.forEach(function ( element, index ){ + if ( index > 0 ) { + textSpan.append("span").text(", "); + } + appendIriLabel(textSpan, element.labelForCurrentLanguage(), element.iri()); + }); + + spanParent.classed("hidden", false); + } else { + spanParent.classed("hidden", true); + } + } + + function setTextAndVisibility( label, value ){ + var parentNode = d3.select(label.node().parentNode); + var hasValue = !!value; + if ( value ) { + label.text(value); + } + parentNode.classed("hidden", !hasValue); + } + + /** Collapsible Sidebar functions; **/ + + sidebar.showSidebar = function ( val, init ){ + // make val to bool + if ( val === 1 ) { + visibleSidebar = true; + collapseButton.node().innerHTML = ">"; + detailArea.classed("hidden", true); + if ( init === true ) { + detailArea.classed("hidden", !visibleSidebar); + graphArea.style("width", "78%"); + graphArea.style("-webkit-animation-name", "none"); + + menuArea.style("width", "78%"); + menuArea.style("-webkit-animation-name", "none"); + + d3.select("#WarningErrorMessagesContainer").style("width", "78%"); + d3.select("#WarningErrorMessagesContainer").style("-webkit-animation-name", "none"); + } else { + graphArea.style("width", "78%"); + graphArea.style("-webkit-animation-name", "sbCollapseAnimation"); + graphArea.style("-webkit-animation-duration", "0.5s"); + + menuArea.style("width", "78%"); + menuArea.style("-webkit-animation-name", "sbCollapseAnimation"); + menuArea.style("-webkit-animation-duration", "0.5s"); + + d3.select("#WarningErrorMessagesContainer").style("width", "78%"); + d3.select("#WarningErrorMessagesContainer").style("-webkit-animation-name", "warn_ExpandRightBarAnimation"); + d3.select("#WarningErrorMessagesContainer").style("-webkit-animation-duration", "0.5s"); + } + graph.options().width(window.innerWidth - (window.innerWidth * 0.22)); + graph.options().navigationMenu().updateScrollButtonVisibility(); + } + if ( val === 0 ) { + visibleSidebar = false; + detailArea.classed("hidden", true); + + collapseButton.node().innerHTML = "<"; + // adjust the layout + if ( init === true ) { + graphArea.style("width", "100%"); + graphArea.style("-webkit-animation-name", "none"); + + menuArea.style("width", "100%"); + menuArea.style("-webkit-animation-name", "none"); + + d3.select("#WarningErrorMessagesContainer").style("width", "100%"); + d3.select("#WarningErrorMessagesContainer").style("-webkit-animation-name", "none"); + } else { + graphArea.style("width", "100%"); + graphArea.style("-webkit-animation-name", "sbExpandAnimation"); + graphArea.style("-webkit-animation-duration", "0.5s"); + + menuArea.style("width", "100%"); + menuArea.style("-webkit-animation-name", "sbExpandAnimation"); + menuArea.style("-webkit-animation-duration", "0.5s"); + + d3.select("#WarningErrorMessagesContainer").style("width", "100%"); + d3.select("#WarningErrorMessagesContainer").style("-webkit-animation-name", "warn_CollapseRightBarAnimation"); + d3.select("#WarningErrorMessagesContainer").style("-webkit-animation-duration", "0.5s"); + + } + graph.options().width(window.innerWidth); + graph.updateCanvasContainerSize(); + graph.options().navigationMenu().updateScrollButtonVisibility(); + } + }; + + sidebar.isSidebarVisible = function (){ + return visibleSidebar; + }; + + sidebar.updateSideBarVis = function ( init ){ + var vis = sidebar.getSidebarVisibility(); + sidebar.showSidebar(parseInt(vis), init); + }; + + sidebar.getSidebarVisibility = function (){ + var isHidden = detailArea.classed("hidden"); + if ( isHidden === false ) return String(1); + if ( isHidden === true ) return String(0); + }; + + sidebar.initSideBarAnimation = function (){ + graphArea.node().addEventListener("animationend", function (){ + detailArea.classed("hidden", !visibleSidebar); + graph.updateCanvasContainerSize(); + graph.options().navigationMenu().updateScrollButtonVisibility(); + }); + }; + + sidebar.setup = function (){ + setupCollapsing(); + sidebar.initSideBarAnimation(); + + collapseButton.on("click", function (){ + graph.options().navigationMenu().hideAllMenus(); + var settingValue = parseInt(sidebar.getSidebarVisibility()); + if ( settingValue === 1 ) sidebar.showSidebar(0); + else sidebar.showSidebar(1); + }); + }; + + + sidebar.updateShowedInformation = function (){ + var editMode = graph.editorMode(); + d3.select("#generalDetails").classed("hidden", editMode); + d3.select("#generalDetailsEdit").classed("hidden", !editMode); + + // store the meta information in graph.options() + + // todo: update edit meta info + graph.options().editSidebar().updateGeneralOntologyInfo(); + + // todo: update showed meta info; + graph.options().sidebar().updateGeneralOntologyInfo(); + + }; + + sidebar.updateGeneralOntologyInfo = function (){ + // get it from graph.options + var generalMetaObj = graph.options().getGeneralMetaObject(); + var preferredLanguage = graph && graph.language ? graph.language() : null; + if ( generalMetaObj.hasOwnProperty("title") ) { + // title has language to it -.- + if ( typeof generalMetaObj.title === "object" ) { + d3.select("#title").node().value = languageTools.textInLanguage(generalMetaObj.title, preferredLanguage); + } else { + d3.select("#title").node().innerHTML = generalMetaObj.title; + } + + } + if ( generalMetaObj.hasOwnProperty("iri") ) d3.select("#about").node().innerHTML = generalMetaObj.iri; + if ( generalMetaObj.hasOwnProperty("iri") ) d3.select("#about").node().href = generalMetaObj.iri; + if ( generalMetaObj.hasOwnProperty("version") ) d3.select("#version").node().innerHTML = generalMetaObj.version; + if ( generalMetaObj.hasOwnProperty("author") ) d3.select("#authors").node().innerHTML = generalMetaObj.author; + // this could also be an object >> + if ( generalMetaObj.hasOwnProperty("description") ) { + if ( typeof generalMetaObj.description === "object" ) { + d3.select("#description").node().innerHTML = languageTools.textInLanguage(generalMetaObj.description, preferredLanguage); + } + else { + d3.select("#description").node().innerHTML = generalMetaObj.description; + } + } + }; + + + return sidebar; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), + +/***/ 339: +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {/** + * Contains the logic for the sidebar. + * @param graph the graph that belongs to these controls + * @returns {{}} + */ + module.exports = function ( graph ){ + + var leftSidebar = {}, + languageTools = webvowl.util.languageTools(), + elementTools = webvowl.util.elementTools(); + var collapseButton = d3.select("#leftSideBarCollapseButton"); + var visibleSidebar = 0; + var backupVisibility = 0; + var sideBarContent = d3.select("#leftSideBarContent"); + var sideBarContainer = d3.select("#containerForLeftSideBar"); + var defaultClassSelectionContainers = []; + var defaultDatatypeSelectionContainers = []; + var defaultPropertySelectionContainers = []; + + leftSidebar.setup = function (){ + setupCollapsing(); + leftSidebar.initSideBarAnimation(); + + collapseButton.on("click", function (){ + graph.options().navigationMenu().hideAllMenus(); + var settingValue = parseInt(leftSidebar.getSidebarVisibility()); + if ( settingValue === 0 ) leftSidebar.showSidebar(1); + else leftSidebar.showSidebar(0); + backupVisibility = settingValue; + }); + + setupSelectionContainers(); + d3.select("#WarningErrorMessages").node().addEventListener("animationend", function (){ + d3.select("#WarningErrorMessages").style("-webkit-animation-name", "none"); + }); + + }; + + leftSidebar.hideCollapseButton = function ( val ){ + sideBarContainer.classed("hidden", val); + }; + + + function unselectAllElements( container ){ + for ( var i = 0; i < container.length; i++ ) + container[i].classed("defaultSelected", false); + } + + function selectThisDefaultElement( element ){ + d3.select(element).classed("defaultSelected", true); + } + + function updateDefaultNameInAccordion( element, identifier ){ + var elementDescription = ""; + if ( identifier === "defaultClass" ) elementDescription = "Class: "; + if ( identifier === "defaultDatatype" ) elementDescription = "Datatype: "; + if ( identifier === "defaultProperty" ) elementDescription = "Property: "; + + d3.select("#" + identifier).node().innerHTML = elementDescription + element.innerHTML; + d3.select("#" + identifier).node().title = element.innerHTML; + } + + function classSelectorFunction(){ + unselectAllElements(defaultClassSelectionContainers); + selectThisDefaultElement(this); + updateDefaultNameInAccordion(this, "defaultClass"); + } + + function datatypeSelectorFunction(){ + unselectAllElements(defaultDatatypeSelectionContainers); + selectThisDefaultElement(this); + updateDefaultNameInAccordion(this, "defaultDatatype"); + } + + function propertySelectorFunction(){ + unselectAllElements(defaultPropertySelectionContainers); + selectThisDefaultElement(this); + updateDefaultNameInAccordion(this, "defaultProperty"); + } + + + function setupSelectionContainers(){ + var classContainer = d3.select("#classContainer"); + var datatypeContainer = d3.select("#datatypeContainer"); + var propertyContainer = d3.select("#propertyContainer"); + // create the supported elements + + var defaultClass = "owl:Class"; + var defaultDatatype = "rdfs:Literal"; + var defaultProperty = "owl:objectProperty"; + + var supportedClasses = graph.options().supportedClasses(); + var supportedDatatypes = graph.options().supportedDatatypes(); + var supportedProperties = graph.options().supportedProperties(); + var i; + + for ( i = 0; i < supportedClasses.length; i++ ) { + var aClassSelectionContainer; + aClassSelectionContainer = classContainer.append("div"); + aClassSelectionContainer.classed("containerForDefaultSelection", true); + aClassSelectionContainer.classed("noselect", true); + aClassSelectionContainer.node().id = "selectedClass" + supportedClasses[i]; + aClassSelectionContainer.node().innerHTML = supportedClasses[i]; + + if ( supportedClasses[i] === defaultClass ) { + selectThisDefaultElement(aClassSelectionContainer.node()); + } + aClassSelectionContainer.on("click", classSelectorFunction); + defaultClassSelectionContainers.push(aClassSelectionContainer); + } + + for ( i = 0; i < supportedDatatypes.length; i++ ) { + var aDTSelectionContainer = datatypeContainer.append("div"); + aDTSelectionContainer.classed("containerForDefaultSelection", true); + aDTSelectionContainer.classed("noselect", true); + aDTSelectionContainer.node().id = "selectedDatatype" + supportedDatatypes[i]; + aDTSelectionContainer.node().innerHTML = supportedDatatypes[i]; + + if ( supportedDatatypes[i] === defaultDatatype ) { + selectThisDefaultElement(aDTSelectionContainer.node()); + } + aDTSelectionContainer.on("click", datatypeSelectorFunction); + defaultDatatypeSelectionContainers.push(aDTSelectionContainer); + } + for ( i = 0; i < supportedProperties.length; i++ ) { + var aPropSelectionContainer = propertyContainer.append("div"); + aPropSelectionContainer.classed("containerForDefaultSelection", true); + aPropSelectionContainer.classed("noselect", true); + aPropSelectionContainer.node().id = "selectedClass" + supportedProperties[i]; + aPropSelectionContainer.node().innerHTML = supportedProperties[i]; + aPropSelectionContainer.on("click", propertySelectorFunction); + if ( supportedProperties[i] === defaultProperty ) { + selectThisDefaultElement(aPropSelectionContainer.node()); + } + defaultPropertySelectionContainers.push(aPropSelectionContainer); + } + } + + function setupCollapsing(){ + // adapted version of this example: http://www.normansblog.de/simple-jquery-accordion/ + function collapseContainers( containers ){ + containers.classed("hidden", true); + } + + function expandContainers( containers ){ + containers.classed("hidden", false); + } + + var triggers = d3.selectAll(".accordion-trigger"); + + // Collapse all inactive triggers on startup + // collapseContainers(d3.selectAll(".accordion-trigger:not(.accordion-trigger-active) + div")); + + triggers.on("click", function (){ + var selectedTrigger = d3.select(this); + if ( selectedTrigger.classed("accordion-trigger-active") ) { + // Collapse the active (which is also the selected) trigger + collapseContainers(d3.select(selectedTrigger.node().nextElementSibling)); + selectedTrigger.classed("accordion-trigger-active", false); + } else { + // Collapse the other trigger ... + // collapseContainers(d3.selectAll(".accordion-trigger-active + div")); + // activeTriggers.classed("accordion-trigger-active", false); + // ... and expand the selected one + expandContainers(d3.select(selectedTrigger.node().nextElementSibling)); + selectedTrigger.classed("accordion-trigger-active", true); + } + }); + } + + + leftSidebar.isSidebarVisible = function (){ + return visibleSidebar; + }; + + leftSidebar.updateSideBarVis = function ( init ){ + var vis = leftSidebar.getSidebarVisibility(); + leftSidebar.showSidebar(parseInt(vis), init); + }; + + leftSidebar.initSideBarAnimation = function (){ + sideBarContainer.node().addEventListener("animationend", function (){ + sideBarContent.classed("hidden", !visibleSidebar); + if ( visibleSidebar === true ) { + sideBarContainer.style("width", "200px"); + sideBarContent.classed("hidden", false); + d3.select("#leftSideBarCollapseButton").style("left", "200px"); + d3.select("#leftSideBarCollapseButton").classed("hidden", false); + d3.select("#WarningErrorMessages").style("left", "100px"); + } + else { + sideBarContainer.style("width", "0px"); + d3.select("#leftSideBarCollapseButton").style("left", "0px"); + d3.select("#WarningErrorMessages").style("left", "0px"); + d3.select("#leftSideBarCollapseButton").classed("hidden", false); + + } + graph.updateCanvasContainerSize(); + graph.options().navigationMenu().updateScrollButtonVisibility(); + }); + }; + + leftSidebar.showSidebar = function ( val, init ){ + // make val to bool + var collapseButton = d3.select("#leftSideBarCollapseButton"); + if ( init === true ) { + visibleSidebar = (backupVisibility === 0); + sideBarContent.classed("hidden", !visibleSidebar); + sideBarContainer.style("-webkit-animation-name", "none"); + d3.select("#WarningErrorMessages").style("-webkit-animation-name", "none"); + if ( visibleSidebar === true ) { + sideBarContainer.style("width", "200px"); + sideBarContent.classed("hidden", false); + d3.select("#leftSideBarCollapseButton").style("left", "200px"); + d3.select("#leftSideBarCollapseButton").classed("hidden", false); + d3.select("#WarningErrorMessages").style("left", "100px"); + collapseButton.node().innerHTML = "<"; + } + + else { + sideBarContainer.style("width", "0px"); + d3.select("#WarningErrorMessages").style("left", "0px"); + d3.select("#leftSideBarCollapseButton").style("left", "0px"); + d3.select("#leftSideBarCollapseButton").classed("hidden", false); + collapseButton.node().innerHTML = ">"; + } + + graph.updateCanvasContainerSize(); + graph.options().navigationMenu().updateScrollButtonVisibility(); + return; + } + + d3.select("#leftSideBarCollapseButton").classed("hidden", true); + + if ( val === 1 ) { + visibleSidebar = true; + collapseButton.node().innerHTML = "<"; + // call expand animation; + sideBarContainer.style("-webkit-animation-name", "l_sbExpandAnimation"); + sideBarContainer.style("-webkit-animation-duration", "0.5s"); + // prepare the animation; + + d3.select("#WarningErrorMessages").style("-webkit-animation-name", "warn_ExpandLeftBarAnimation"); + d3.select("#WarningErrorMessages").style("-webkit-animation-duration", "0.5s"); + + } + if ( val === 0 ) { + visibleSidebar = false; + sideBarContent.classed("hidden", true); + collapseButton.node().innerHTML = ">"; + // call collapse animation + sideBarContainer.style("-webkit-animation-name", "l_sbCollapseAnimation"); + sideBarContainer.style("-webkit-animation-duration", "0.5s"); + d3.select("#WarningErrorMessages").style("-webkit-animation-name", "warn_CollapseLeftBarAnimation"); + d3.select("#WarningErrorMessages").style("-webkit-animation-duration", "0.5s"); + d3.select("#WarningErrorMessages").style("left", "0"); + } + + }; + + leftSidebar.getSidebarVisibility = function (){ + var isHidden = sideBarContent.classed("hidden"); + if ( isHidden === false ) return String(1); + if ( isHidden === true ) return String(0); + }; + + return leftSidebar; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), + +/***/ 340: +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {/** + * Contains the logic for the sidebar. + * @param graph the graph that belongs to these controls + * @returns {{}} + */ + module.exports = function ( graph ){ + + var editSidebar = {}, + languageTools = webvowl.util.languageTools(), + elementTools = webvowl.util.elementTools(); + + var prefixModule = webvowl.util.prefixTools(graph); + var selectedElementForCharacteristics; + var oldPrefix, oldPrefixURL; + var prefix_editMode = false; + + + editSidebar.clearMetaObjectValue = function (){ + d3.select("#titleEditor").node().value = ""; + d3.select("#iriEditor").node().value = ""; + d3.select("#versionEditor").node().value = ""; + d3.select("#authorsEditor").node().value = ""; + d3.select("#descriptionEditor").node().value = ""; + // todo add clear description; + }; + + + editSidebar.updatePrefixUi = function (){ + editSidebar.updateElementWidth(); + var prefixListContainer = d3.select("#prefixURL_Container"); + while ( prefixListContainer.node().firstChild ) { + prefixListContainer.node().removeChild(prefixListContainer.node().firstChild); + } + setupPrefixList(); + }; + + editSidebar.setup = function (){ + setupCollapsing(); + setupPrefixList(); + setupAddPrefixButton(); + setupSupportedDatatypes(); + + + d3.select("#titleEditor") + .on("change", function (){ + graph.options().addOrUpdateGeneralObjectEntry("title", d3.select("#titleEditor").node().value); + }) + .on("keydown", function (){ + d3.event.stopPropagation(); + if ( d3.event.keyCode === 13 ) { + d3.event.preventDefault(); + graph.options().addOrUpdateGeneralObjectEntry("title", d3.select("#titleEditor").node().value); + } + }); + d3.select("#iriEditor") + .on("change", function (){ + if ( graph.options().addOrUpdateGeneralObjectEntry("iri", d3.select("#iriEditor").node().value) === false ) { + // restore value + d3.select("#iriEditor").node().value = graph.options().getGeneralMetaObjectProperty('iri'); + } + }) + .on("keydown", function (){ + d3.event.stopPropagation(); + if ( d3.event.keyCode === 13 ) { + d3.event.preventDefault(); + if ( graph.options().addOrUpdateGeneralObjectEntry("iri", d3.select("#iriEditor").node().value) === false ) { + // restore value + d3.select("#iriEditor").node().value = graph.options().getGeneralMetaObjectProperty('iri'); + } + } + }); + d3.select("#versionEditor") + .on("change", function (){ + graph.options().addOrUpdateGeneralObjectEntry("version", d3.select("#versionEditor").node().value); + }) + .on("keydown", function (){ + d3.event.stopPropagation(); + if ( d3.event.keyCode === 13 ) { + d3.event.preventDefault(); + graph.options().addOrUpdateGeneralObjectEntry("version", d3.select("#versionEditor").node().value); + } + }); + d3.select("#authorsEditor") + .on("change", function (){ + graph.options().addOrUpdateGeneralObjectEntry("author", d3.select("#authorsEditor").node().value); + }) + .on("keydown", function (){ + d3.event.stopPropagation(); + if ( d3.event.keyCode === 13 ) { + d3.event.preventDefault(); + graph.options().addOrUpdateGeneralObjectEntry("author", d3.select("#authorsEditor").node().value); + } + }); + d3.select("#descriptionEditor") + .on("change", function (){ + graph.options().addOrUpdateGeneralObjectEntry("description", d3.select("#descriptionEditor").node().value); + }); + + editSidebar.updateElementWidth(); + + }; + + function setupSupportedDatatypes(){ + var datatypeEditorSelection = d3.select("#typeEditor_datatype").node(); + var supportedDatatypes = ["undefined", "xsd:boolean", "xsd:double", "xsd:integer", "xsd:string"]; + for ( var i = 0; i < supportedDatatypes.length; i++ ) { + var optB = document.createElement('option'); + optB.innerHTML = supportedDatatypes[i]; + datatypeEditorSelection.appendChild(optB); + } + } + + function highlightDeleteButton( enable, name ){ + var deletePath = d3.select("#del_pathFor_" + name); + var deleteRect = d3.select("#del_rectFor_" + name); + + if ( enable === false ) { + deletePath.node().style = "stroke: #f00;"; + deleteRect.style("cursor", "auto"); + } else { + deletePath.node().style = "stroke: #ff972d;"; + deleteRect.style("cursor", "pointer"); + } + } + + + function highlightEditButton( enable, name, fill ){ + var editPath = d3.select("#pathFor_" + name); + var editRect = d3.select("#rectFor_" + name); + + if ( enable === false ) { + if ( fill ) + editPath.node().style = "fill: #fff; stroke : #fff; stroke-width : 1px"; + else + editPath.node().style = " stroke : #fff; stroke-width : 1px"; + + editRect.style("cursor", "auto"); + } else { + if ( fill ) + editPath.node().style = "fill: #ff972d; stroke : #ff972d; stroke-width : 1px"; + else + editPath.node().style = "stroke : #ff972d; stroke-width : 1px"; + editRect.style("cursor", "pointer"); + } + + } + + function setupAddPrefixButton(){ + var btn = d3.select("#addPrefixButton"); + btn.on("click", function (){ + + // check if we are still in editMode? + if ( prefix_editMode === false ) { + // create new line entry; + var name = "emptyPrefixEntry"; + var prefixListContainer = d3.select("#prefixURL_Container"); + var prefixEditContainer = prefixListContainer.append("div"); + prefixEditContainer.classed("prefixIRIElements", true); + prefixEditContainer.node().id = "prefixContainerFor_" + name; + + var IconContainer = prefixEditContainer.append("div"); + IconContainer.style("position", "absolute"); + IconContainer.node().id = "containerFor_" + name; + var editButton = IconContainer.append("svg"); + editButton.style("width", "14px"); + editButton.style("height", "20px"); + // editButton.classed("editPrefixButton", true); + editButton.classed("noselect", true); + //editButton.node().innerHTML = "\u2714"; + editButton.node().id = "editButtonFor_" + name; + + editButton.node().elementStyle = "save"; + editButton.node().selectorName = name; + var editIcon = editButton.append("g"); + var editRect = editIcon.append("rect"); + var editPath = editIcon.append("path"); + editIcon.node().id = "iconFor_" + name; + editPath.node().id = "pathFor_" + name; + editRect.node().id = "rectFor_" + name; + + editIcon.node().selectorName = name; + editPath.node().selectorName = name; + editRect.node().selectorName = name; + IconContainer.node().title = "Save new prefix and IRI"; + + editPath.classed("editPrefixIcon"); + editPath.style("stroke", "#fff"); + editPath.style("stroke-width", "1px"); + editPath.style("fill", "#fff"); + editRect.attr("width", "14px"); + editRect.attr("height", "14px"); + editRect.style("fill", "#18202A"); + editRect.attr("transform", "matrix(1,0,0,1,-3,4)"); + + editButton.selectAll("g").on("mouseover", function (){ + highlightEditButton(true, this.selectorName, true); + }); + editButton.selectAll("g").on("mouseout", function (){ + highlightEditButton(false, this.selectorName, true); + }); + // Check mark + // M9 16.2L4.8 12l-1.4 1.4L9 19 21 7l-1.4-1.4L9 16.2z + // pencil + // M3 17.25V21h3.75L17.81 9.94l-3.75-3.75L3 17.25zM20.71 7.04c.39-.39.39-1.02 0-1.41l-2.34-2.34c-.39-.39-1.02-.39-1.41 0l-1.83 1.83 3.75 3.75 1.83-1.83z + editPath.attr("d", "M9 16.2L4.8 12l-1.4 1.4L9 19 21 7l-1.4-1.4L9 16.2z"); + editPath.attr("transform", "matrix(0.45,0,0,0.45,0,5)"); + + var prefInput = prefixEditContainer.append("input"); + prefInput.classed("prefixInput", true); + prefInput.node().type = "text"; + prefInput.node().id = "prefixInputFor_" + name; + prefInput.node().autocomplete = "off"; + prefInput.node().value = ""; + prefInput.style("margin-left", "14px"); + + var prefURL = prefixEditContainer.append("input"); + prefURL.classed("prefixURL", true); + prefURL.node().type = "text"; + prefURL.node().id = "prefixURLFor_" + name; + prefURL.node().autocomplete = "off"; + prefURL.node().value = ""; + + prefInput.node().disabled = false; + prefURL.node().disabled = false; + prefix_editMode = true; + var deleteContainer = prefixEditContainer.append("div"); + deleteContainer.style("float", "right"); + var deleteButton = deleteContainer.append("svg"); + deleteButton.node().id = "deleteButtonFor_" + name; + deleteContainer.node().title = "Delete prefix and IRI"; + deleteButton.style("width", "10px"); + deleteButton.style("height", "20px"); + var deleteIcon = deleteButton.append("g"); + var deleteRect = deleteIcon.append("rect"); + var deletePath = deleteIcon.append("path"); + deleteIcon.node().id = "del_iconFor_" + name; + deletePath.node().id = "del_pathFor_" + name; + deleteRect.node().id = "del_rectFor_" + name; + + deleteIcon.node().selectorName = name; + deletePath.node().selectorName = name; + deleteRect.node().selectorName = name; + + + deletePath.style("stroke", "#f00"); + deleteRect.attr("width", "10px"); + deleteRect.attr("height", "14px"); + deleteRect.style("fill", "#18202A"); + deleteRect.attr("transform", "matrix(1,0,0,1,-3,4)"); + + + deletePath.attr("d", "M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"); + deletePath.attr("transform", "matrix(0.45,0,0,0.45,0,5)"); + + deleteButton.selectAll("g").on("mouseover", function (){ + highlightDeleteButton(true, this.selectorName); + }); + deleteButton.selectAll("g").on("mouseout", function (){ + highlightDeleteButton(false, this.selectorName); + }); + + + // connect the buttons; + editButton.on("click", enablePrefixEdit); + deleteButton.on("click", deletePrefixLine); + + editSidebar.updateElementWidth(); + // swap focus to prefixInput + prefInput.node().focus(); + oldPrefix = name; + oldPrefixURL = ""; + d3.select("#addPrefixButton").node().innerHTML = "Save Prefix"; + } else { + d3.select("#editButtonFor_emptyPrefixEntry").on("click")(d3.select("#editButtonFor_emptyPrefixEntry").node()); + } + + }); + + } + + function setupPrefixList(){ + if ( graph.isEditorMode() === false ) return; + var prefixListContainer = d3.select("#prefixURL_Container"); + var prefixElements = graph.options().prefixList(); + for ( var name in prefixElements ) { + if ( prefixElements.hasOwnProperty(name) ) { + var prefixEditContainer = prefixListContainer.append("div"); + prefixEditContainer.classed("prefixIRIElements", true); + prefixEditContainer.node().id = "prefixContainerFor_" + name; + + // create edit button which enables the input fields + var IconContainer = prefixEditContainer.append("div"); + IconContainer.style("position", "absolute"); + IconContainer.node().id = "containerFor_" + name; + var editButton = IconContainer.append("svg"); + editButton.style("width", "14px"); + editButton.style("height", "20px"); + editButton.classed("noselect", true); + editButton.node().id = "editButtonFor_" + name; + IconContainer.node().title = "Edit prefix and IRI"; + editButton.node().elementStyle = "save"; + editButton.node().selectorName = name; + + editButton.node().id = "editButtonFor_" + name; + editButton.node().elementStyle = "edit"; + var editIcon = editButton.append("g"); + var editRect = editIcon.append("rect"); + var editPath = editIcon.append("path"); + editIcon.node().id = "iconFor_" + name; + editPath.node().id = "pathFor_" + name; + editRect.node().id = "rectFor_" + name; + + editIcon.node().selectorName = name; + editPath.node().selectorName = name; + editRect.node().selectorName = name; + + + editPath.classed("editPrefixIcon"); + editPath.style("stroke", "#fff"); + editPath.style("stroke-width", "1px"); + editRect.attr("width", "14px"); + editRect.attr("height", "14px"); + editRect.style("fill", "#18202A"); + editRect.attr("transform", "matrix(1,0,0,1,-3,4)"); + + editButton.selectAll("g").on("mouseover", function (){ + var sender = this; + var fill = false; + var enable = true; + var f_editPath = d3.select("#pathFor_" + sender.selectorName); + var f_editRect = d3.select("#rectFor_" + sender.selectorName); + + if ( enable === false ) { + if ( fill ) + f_editPath.node().style = "fill: #fff; stroke : #fff; stroke-width : 1px"; + else + f_editPath.node().style = " stroke : #fff; stroke-width : 1px"; + + f_editRect.style("cursor", "auto"); + } else { + if ( fill ) + f_editPath.node().style = "fill: #ff972d; stroke : #ff972d; stroke-width : 1px"; + else + f_editPath.node().style = "stroke : #ff972d; stroke-width : 1px"; + f_editRect.style("cursor", "pointer"); + } + }); + editButton.selectAll("g").on("mouseout", function (){ + var sender = this; + var fill = false; + var enable = false; + var f_editPath = d3.select("#pathFor_" + sender.selectorName); + var f_editRect = d3.select("#rectFor_" + sender.selectorName); + + if ( enable === false ) { + if ( fill ) + f_editPath.node().style = "fill: #fff; stroke : #fff; stroke-width : 1px"; + else + f_editPath.node().style = " stroke : #fff; stroke-width : 1px"; + + f_editRect.style("cursor", "auto"); + } else { + if ( fill ) + f_editPath.node().style = "fill: #ff972d; stroke : #ff972d; stroke-width : 1px"; + else + f_editPath.node().style = "stroke : #ff972d; stroke-width : 1px"; + f_editRect.style("cursor", "pointer"); + } + }); + + editPath.attr("d", "M3 17.25V21h3.75L17.81 9.94l-3.75-3.75L3 17.25zM20.71 7.04c.39-.39.39-1.02 0-1.41l-2.34-2.34c-.39-.39-1.02-.39-1.41 0l-1.83 1.83 3.75 3.75 1.83-1.83z"); + editPath.attr("transform", "matrix(-0.45,0,0,0.45,10,5)"); + + // create input field for prefix + var prefInput = prefixEditContainer.append("input"); + prefInput.classed("prefixInput", true); + prefInput.node().type = "text"; + prefInput.node().id = "prefixInputFor_" + name; + prefInput.node().autocomplete = "off"; + prefInput.node().value = name; + prefInput.style("margin-left", "14px"); + + // create input field for prefix url + var prefURL = prefixEditContainer.append("input"); + prefURL.classed("prefixURL", true); + prefURL.node().type = "text"; + prefURL.node().id = "prefixURLFor_" + name; + prefURL.node().autocomplete = "off"; + prefURL.node().value = prefixElements[name]; + prefURL.node().title = prefixElements[name]; + // disable the input fields (already defined elements can be edited later) + prefInput.node().disabled = true; + prefURL.node().disabled = true; + + // create the delete button + var deleteContainer = prefixEditContainer.append("div"); + deleteContainer.style("float", "right"); + var deleteButton = deleteContainer.append("svg"); + deleteButton.node().id = "deleteButtonFor_" + name; + deleteContainer.node().title = "Delete prefix and IRI"; + deleteButton.style("width", "10px"); + deleteButton.style("height", "20px"); + var deleteIcon = deleteButton.append("g"); + var deleteRect = deleteIcon.append("rect"); + var deletePath = deleteIcon.append("path"); + deleteIcon.node().id = "del_iconFor_" + name; + deletePath.node().id = "del_pathFor_" + name; + deleteRect.node().id = "del_rectFor_" + name; + + deleteIcon.node().selectorName = name; + deletePath.node().selectorName = name; + deleteRect.node().selectorName = name; + + + deletePath.style("stroke", "#f00"); + deleteRect.attr("width", "10px"); + deleteRect.attr("height", "14px"); + deleteRect.style("fill", "#18202A"); + deleteRect.attr("transform", "matrix(1,0,0,1,-3,4)"); + + + deletePath.attr("d", "M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"); + deletePath.attr("transform", "matrix(0.45,0,0,0.45,0,5)"); + + deleteButton.selectAll("g").on("mouseover", function (){ + var selector = this; + var enable = true; + var f_deletePath = d3.select("#del_pathFor_" + selector.selectorName); + var f_deleteRect = d3.select("#del_rectFor_" + selector.selectorName); + + if ( enable === false ) { + f_deletePath.node().style = "stroke: #f00;"; + f_deleteRect.style("cursor", "auto"); + } else { + f_deletePath.node().style = "stroke: #ff972d;"; + f_deleteRect.style("cursor", "pointer"); + } + }); + deleteButton.selectAll("g").on("mouseout", function (){ + var selector = this; + var enable = false; + var f_deletePath = d3.select("#del_pathFor_" + selector.selectorName); + var f_deleteRect = d3.select("#del_rectFor_" + selector.selectorName); + + if ( enable === false ) { + f_deletePath.node().style = "stroke: #f00;"; + f_deleteRect.style("cursor", "auto"); + } else { + f_deletePath.node().style = "stroke: #ff972d;"; + f_deleteRect.style("cursor", "pointer"); + } + }); + + + editButton.on("click", enablePrefixEdit); + deleteButton.on("click", deletePrefixLine); + + // EXPERIMENTAL + + if ( name === "rdf" || + name === "rdfs" || + name === "xsd" || name === "dc" || + name === "owl" + ) { + // make them invis so the spacing does not change + IconContainer.classed("hidden", true); + deleteContainer.classed("hidden", true); + } + } + } + prefixModule.updatePrefixModel(); + } + + function deletePrefixLine(){ + if ( this.disabled === true ) return; + d3.select("#addPrefixButton").node().innerHTML = "Add Prefix"; + var selector = this.id.split("_")[1]; + d3.select("#prefixContainerFor_" + selector).remove(); + graph.options().removePrefix(selector); + prefix_editMode = false; // < 0 ) { + var basePref = graph.options().prefixList()[pr]; + if ( basePref === undefined ) { + console.log("ERROR __________________"); + graph.options().warningModule().showWarning("Invalid Element IRI", + "Could not resolve prefix '" + basePref + "'", + "Restoring previous IRI for Element" + element.iri(), 1, false); + d3.select("#element_iriEditor").node().value = element.iri(); + return; + + } + // check if url is not empty + + if ( name.length === 0 ) { + graph.options().warningModule().showWarning("Invalid Element IRI", + "Input IRI is EMPTY", + "Restoring previous IRI for Element" + element.iri(), 1, false); + console.log("NO INPUT PROVIDED"); + d3.select("#element_iriEditor").node().value = element.iri(); + return; + + } + url = basePref + name; + } + else { + url = base + name; + } + } else { + if ( url.length === 0 ) { + // + console.log("NO INPUT PROVIDED"); + d3.select("#element_iriEditor").node().value = element.iri(); + return; + } + // failed to identify anything useful + console.log("Tryig to use the input!"); + url = base + url; + } + } + return url; + } + + function changeIriForElement( element ){ + var url = getURLFROMPrefixedVersion(element); + var base = graph.options().getGeneralMetaObjectProperty("iri"); + var sanityCheckResult; + if ( elementTools.isNode(element) ) { + + sanityCheckResult = graph.checkIfIriClassAlreadyExist(url); + if ( sanityCheckResult === false ) { + element.iri(url); + } else { + // throw warnign + graph.options().warningModule().showWarning("Already seen this class", + "Input IRI: " + url + " for element: " + element.labelForCurrentLanguage() + " already been set", + "Restoring previous IRI for Element : " + element.iri(), 2, false, sanityCheckResult); + + editSidebar.updateSelectionInformation(element); + return; + + } + } + if ( elementTools.isProperty(element) === true ) { + sanityCheckResult = editSidebar.checkProperIriChange(element, url); + if ( sanityCheckResult !== false ) { + graph.options().warningModule().showWarning("Already seen this property", + "Input IRI: " + url + " for element: " + element.labelForCurrentLanguage() + " already been set", + "Restoring previous IRI for Element : " + element.iri(), 1, false, sanityCheckResult); + + editSidebar.updateSelectionInformation(element); + return; + } + } + + // if (element.existingPropertyIRI(url)===true){ + // console.log("I Have seen this Particular URL already "+url); + // graph.options().warningModule().showWarning("Already Seen This one ", + // "Input IRI For Element"+ element.labelForCurrentLanguage()+" already been set ", + // "Restoring previous IRI for Element"+element.iri(),1,false); + // d3.select("#element_iriEditor").node().value=graph.options().prefixModule().getPrefixRepresentationForFullURI(element.iri()); + // editSidebar.updateSelectionInformation(element); + // return; + // } + + element.iri(url); + if ( identifyExternalCharacteristicForElement(base, url) === true ) { + addAttribute(element, "external"); + // background color for external element; + element.backgroundColor("#36C"); + element.redrawElement(); + element.redrawLabelText(); + // handle visual selection + + } else { + removeAttribute(element, "external"); + // background color for external element; + element.backgroundColor(undefined); + element.redrawElement(); + element.redrawLabelText(); + + } + + if ( element.focused() ) { + graph.options().focuserModule().handle(element, true); // unfocus + graph.options().focuserModule().handle(element, true); // focus + } + // graph.options().focuserModule().handle(undefined); + + + d3.select("#element_iriEditor").node().value = prefixModule.getPrefixRepresentationForFullURI(url); + editSidebar.updateSelectionInformation(element); + } + + function validURL( str ){ + var urlregex = /^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/; + return urlregex.test(str); + } + + + function changeLabelForElement( element ){ + element.label(d3.select("#element_labelEditor").node().value); + element.redrawLabelText(); + } + + editSidebar.updateEditDeleteButtonIds = function ( oldPrefix, newPrefix ){ + d3.select("#prefixInputFor_" + oldPrefix).node().id = "prefixInputFor_" + newPrefix; + d3.select("#prefixURLFor_" + oldPrefix).node().id = "prefixURLFor_" + newPrefix; + d3.select("#deleteButtonFor_" + oldPrefix).node().id = "deleteButtonFor_" + newPrefix; + d3.select("#editButtonFor_" + oldPrefix).node().id = "editButtonFor_" + newPrefix; + + d3.select("#prefixContainerFor_" + oldPrefix).node().id = "prefixContainerFor_" + newPrefix; + }; + + editSidebar.checkForExistingURL = function ( url ){ + var i; + var allProps = graph.getUnfilteredData().properties; + for ( i = 0; i < allProps.length; i++ ) { + if ( allProps[i].iri() === url ) return true; + } + return false; + + }; + editSidebar.checkProperIriChange = function ( element, url ){ + console.log("Element changed Label"); + console.log("Testing URL " + url); + if ( element.type() === "rdfs:subClassOf" || element.type() === "owl:disjointWith" ) { + console.log("ignore this for now, already handled in the type and domain range changer"); + } else { + var i; + var allProps = graph.getUnfilteredData().properties; + for ( i = 0; i < allProps.length; i++ ) { + if ( allProps[i] === element ) continue; + if ( allProps[i].iri() === url ) return allProps[i]; + } + } + return false; + }; + + editSidebar.updateSelectionInformation = function ( element ){ + + if ( element === undefined ) { + // show hint; + d3.select("#selectedElementProperties").classed("hidden", true); + d3.select("#selectedElementPropertiesEmptyHint").classed("hidden", false); + selectedElementForCharacteristics = null; + editSidebar.updateElementWidth(); + } + else { + d3.select("#selectedElementProperties").classed("hidden", false); + d3.select("#selectedElementPropertiesEmptyHint").classed("hidden", true); + d3.select("#typeEditForm_datatype").classed("hidden", true); + + // set the element IRI, and labels + d3.select("#element_iriEditor").node().value = element.iri(); + d3.select("#element_labelEditor").node().value = element.labelForCurrentLanguage(); + d3.select("#element_iriEditor").node().title = element.iri(); + + d3.select("#element_iriEditor") + .on("change", function (){ + var elementIRI = element.iri(); + var prefixed = graph.options().prefixModule().getPrefixRepresentationForFullURI(elementIRI); + if ( prefixed === d3.select("#element_iriEditor").node().value ) { + console.log("Iri is identical, nothing has changed!"); + return; + } + + changeIriForElement(element); + }) + .on("keydown", function (){ + d3.event.stopPropagation(); + if ( d3.event.keyCode === 13 ) { + d3.event.preventDefault(); + console.log("IRI CHANGED Via ENTER pressed"); + changeIriForElement(element); + d3.select("#element_iriEditor").node().title = element.iri(); + } + }); + + var forceIRISync = defaultIriValue(element); + d3.select("#element_labelEditor") + .on("change", function (){ + var sanityCheckResult; + console.log("Element changed Label"); + var url = getURLFROMPrefixedVersion(element); + if ( element.iri() !== url ) { + if ( elementTools.isProperty(element) === true ) { + sanityCheckResult = editSidebar.checkProperIriChange(element, url); + if ( sanityCheckResult !== false ) { + graph.options().warningModule().showWarning("Already seen this property", + "Input IRI: " + url + " for element: " + element.labelForCurrentLanguage() + " already been set", + "Continuing with duplicate property!", 1, false, sanityCheckResult); + editSidebar.updateSelectionInformation(element); + return; + } + } + + if ( elementTools.isNode(element) === true ) { + sanityCheckResult = graph.checkIfIriClassAlreadyExist(url); + if ( sanityCheckResult !== false ) { + graph.options().warningModule().showWarning("Already seen this Class", + "Input IRI: " + url + " for element: " + element.labelForCurrentLanguage() + " already been set", + "Restoring previous IRI for Element : " + element.iri(), 2, false, sanityCheckResult); + + editSidebar.updateSelectionInformation(element); + return; + } + } + element.iri(url); + } + changeLabelForElement(element); + editSidebar.updateSelectionInformation(element); // prevents that it will be changed if node is still active + }) + .on("keydown", function (){ + d3.event.stopPropagation(); + if ( d3.event.keyCode === 13 ) { + d3.event.preventDefault(); + var sanityCheckResult; + console.log("Element changed Label"); + var url = getURLFROMPrefixedVersion(element); + if ( element.iri() !== url ) { + if ( elementTools.isProperty(element) === true ) { + sanityCheckResult = editSidebar.checkProperIriChange(element, url); + if ( sanityCheckResult !== false ) { + graph.options().warningModule().showWarning("Already seen this property", + "Input IRI: " + url + " for element: " + element.labelForCurrentLanguage() + " already been set", + "Continuing with duplicate property!", 1, false, sanityCheckResult); + + editSidebar.updateSelectionInformation(element); + return; + } + } + + if ( elementTools.isNode(element) === true ) { + sanityCheckResult = graph.checkIfIriClassAlreadyExist(url); + if ( sanityCheckResult !== false ) { + graph.options().warningModule().showWarning("Already seen this Class", + "Input IRI: " + url + " for element: " + element.labelForCurrentLanguage() + " already been set", + "Restoring previous IRI for Element : " + element.iri(), 2, false, sanityCheckResult); + + editSidebar.updateSelectionInformation(element); + return; + } + } + element.iri(url); + } + changeLabelForElement(element); + } + }) + .on("keyup", function (){ + if ( forceIRISync ) { + var labelName = d3.select("#element_labelEditor").node().value; + var resourceName = labelName.replaceAll(" ", "_"); + var syncedIRI = element.baseIri() + resourceName; + + //element.iri(syncedIRI); + d3.select("#element_iriEditor").node().title = element.iri(); + d3.select("#element_iriEditor").node().value = prefixModule.getPrefixRepresentationForFullURI(syncedIRI); + } + }); + // check if we are allowed to change IRI OR LABEL + d3.select("#element_iriEditor").node().disabled = false; + d3.select("#element_labelEditor").node().disabled = false; + + if ( element.type() === "rdfs:subClassOf" ) { + d3.select("#element_iriEditor").node().value = "http://www.w3.org/2000/01/rdf-schema#subClassOf"; + d3.select("#element_iriEditor").node().title = "http://www.w3.org/2000/01/rdf-schema#subClassOf"; + d3.select("#element_labelEditor").node().value = "Subclass of"; + d3.select("#element_iriEditor").node().disabled = true; + d3.select("#element_labelEditor").node().disabled = true; + } + if ( element.type() === "owl:Thing" ) { + d3.select("#element_iriEditor").node().value = "http://www.w3.org/2002/07/owl#Thing"; + d3.select("#element_iriEditor").node().title = "http://www.w3.org/2002/07/owl#Thing"; + d3.select("#element_labelEditor").node().value = "Thing"; + d3.select("#element_iriEditor").node().disabled = true; + d3.select("#element_labelEditor").node().disabled = true; + } + + if ( element.type() === "owl:disjointWith" ) { + d3.select("#element_iriEditor").node().value = "http://www.w3.org/2002/07/owl#disjointWith"; + d3.select("#element_iriEditor").node().title = "http://www.w3.org/2002/07/owl#disjointWith"; + d3.select("#element_iriEditor").node().disabled = true; + d3.select("#element_labelEditor").node().disabled = true; + } + + if ( element.type() === "rdfs:Literal" ) { + d3.select("#element_iriEditor").node().value = "http://www.w3.org/2000/01/rdf-schema#Literal"; + d3.select("#element_iriEditor").node().title = "http://www.w3.org/2000/01/rdf-schema#Literal"; + d3.select("#element_iriEditor").node().disabled = true; + d3.select("#element_labelEditor").node().disabled = true; + element.iri("http://www.w3.org/2000/01/rdf-schema#Literal"); + } + if ( element.type() === "rdfs:Datatype" ) { + var datatypeEditorSelection = d3.select("#typeEditor_datatype"); + d3.select("#typeEditForm_datatype").classed("hidden", false); + element.iri("http://www.w3.org/2000/01/rdf-schema#Datatype"); + d3.select("#element_iriEditor").node().value = "http://www.w3.org/2000/01/rdf-schema#Datatype"; + d3.select("#element_iriEditor").node().title = "http://www.w3.org/2000/01/rdf-schema#Datatype"; + d3.select("#element_iriEditor").node().disabled = true; + d3.select("#element_labelEditor").node().disabled = true; + + datatypeEditorSelection.node().value = element.dType(); + if ( datatypeEditorSelection.node().value === "undefined" ) { + d3.select("#element_iriEditor").node().disabled = true; // always prevent IRI modifications + d3.select("#element_labelEditor").node().disabled = false; + } + // reconnect the element + datatypeEditorSelection.on("change", function (){ + changeDatatypeType(element); + }); + } + + // add type selector + var typeEditorSelection = d3.select("#typeEditor").node(); + var htmlCollection = typeEditorSelection.children; + var numEntries = htmlCollection.length; + var i; + var elementPrototypes = getElementPrototypes(element); + for ( i = 0; i < numEntries; i++ ) + typeEditorSelection.removeChild(htmlCollection[0]); + + for ( i = 0; i < elementPrototypes.length; i++ ) { + var optA = document.createElement('option'); + optA.innerHTML = elementPrototypes[i]; + typeEditorSelection.appendChild(optA); + } + // set the proper value in the selection + typeEditorSelection.value = element.type(); + d3.select("#typeEditor").on("change", function (){ + elementTypeSelectionChanged(element); + }); + + + // add characteristics selection + var needChar = elementNeedsCharacteristics(element); + d3.select("#property_characteristics_Container").classed("hidden", !needChar); + if ( needChar === true ) { + addElementsCharacteristics(element); + } + var fullURI = d3.select("#element_iriEditor").node().value; + d3.select("#element_iriEditor").node().value = prefixModule.getPrefixRepresentationForFullURI(fullURI); + d3.select("#element_iriEditor").node().title = fullURI; + editSidebar.updateElementWidth(); + } + + }; + + editSidebar.updateGeneralOntologyInfo = function (){ + var preferredLanguage = graph && graph.language ? graph.language() : null; + + // get it from graph.options + var generalMetaObj = graph.options().getGeneralMetaObject(); + if ( generalMetaObj.hasOwnProperty("title") ) { + // title has language to it -.- + if ( typeof generalMetaObj.title === "object" ) { + d3.select("#titleEditor").node().value = languageTools.textInLanguage(generalMetaObj.title, preferredLanguage); + } else + d3.select("#titleEditor").node().value = generalMetaObj.title; + } + if ( generalMetaObj.hasOwnProperty("iri") ) d3.select("#iriEditor").node().value = generalMetaObj.iri; + if ( generalMetaObj.hasOwnProperty("version") ) d3.select("#versionEditor").node().value = generalMetaObj.version; + if ( generalMetaObj.hasOwnProperty("author") ) d3.select("#authorsEditor").node().value = generalMetaObj.author; + + + if ( generalMetaObj.hasOwnProperty("description") ) { + + if ( typeof generalMetaObj.description === "object" ) + d3.select("#descriptionEditor").node().value = + languageTools.textInLanguage(generalMetaObj.description, preferredLanguage); + else + d3.select("#descriptionEditor").node().value = generalMetaObj.description; + } + else + d3.select("#descriptionEditor").node().value = "No Description"; + }; + + editSidebar.updateElementWidth = function (){ + var height = window.innerHeight - 40; + var lsb_offset = d3.select("#logo").node().getBoundingClientRect().height + 5; + var lsb_height = height - lsb_offset; + d3.select("#containerForLeftSideBar").style("top", lsb_offset + "px"); + d3.select("#leftSideBarCollapseButton").style("top", lsb_offset + "px"); + d3.select("#containerForLeftSideBar").style("height", lsb_height + "px"); + + var div_width = d3.select("#generalDetailsEdit").node().getBoundingClientRect().width; + div_width += 10; + + var title_labelWidth = d3.select("#titleEditor-label").node().getBoundingClientRect().width + 20; + var iri_labelWidth = d3.select("#iriEditor-label").node().getBoundingClientRect().width + 20; + var version_labelWidth = d3.select("#versionEditor-label").node().getBoundingClientRect().width + 20; + var author_labelWidth = d3.select("#authorsEditor-label").node().getBoundingClientRect().width + 20; + //find max width; + var maxW = 0; + maxW = Math.max(maxW, title_labelWidth); + maxW = Math.max(maxW, iri_labelWidth); + maxW = Math.max(maxW, version_labelWidth); + maxW = Math.max(maxW, author_labelWidth); + + var meta_inputWidth = div_width - maxW - 10; + + d3.select("#titleEditor").style("width", meta_inputWidth + "px"); + d3.select("#iriEditor").style("width", meta_inputWidth + "px"); + d3.select("#versionEditor").style("width", meta_inputWidth + "px"); + d3.select("#authorsEditor").style("width", meta_inputWidth + "px"); + + + var elementIri_width = d3.select("#element_iriEditor-label").node().getBoundingClientRect().width + 20; + var elementLabel_width = d3.select("#element_labelEditor-label").node().getBoundingClientRect().width + 20; + var elementType_width = d3.select("#typeEditor-label").node().getBoundingClientRect().width + 20; + var elementDType_width = d3.select("#typeEditor_datatype-label").node().getBoundingClientRect().width + 20; + + maxW = 0; + maxW = Math.max(maxW, elementIri_width); + maxW = Math.max(maxW, elementLabel_width); + maxW = Math.max(maxW, elementType_width); + maxW = Math.max(maxW, elementDType_width); + var selectedElement_inputWidth = div_width - maxW - 10; + + d3.select("#element_iriEditor").style("width", selectedElement_inputWidth + "px"); + d3.select("#element_labelEditor").style("width", selectedElement_inputWidth + "px"); + d3.select("#typeEditor").style("width", selectedElement_inputWidth + 4 + "px"); + d3.select("#typeEditor_datatype").style("width", selectedElement_inputWidth + 4 + "px"); + + // update prefix Element width; + var containerWidth = d3.select("#containerForPrefixURL").node().getBoundingClientRect().width; + if ( containerWidth !== 0 ) { + var inputs = d3.selectAll(".prefixInput"); + if ( inputs.node() ) { + var prefixWidth = d3.selectAll(".prefixInput").node().getBoundingClientRect().width; + d3.selectAll(".prefixURL").style("width", containerWidth - prefixWidth - 45 + "px"); + } + } + }; + + function addElementsCharacteristics( element ){ + // save selected element for checkbox handler + selectedElementForCharacteristics = element; + var i; + // KILL old elements + var charSelectionNode = d3.select("#property_characteristics_Selection"); + var htmlCollection = charSelectionNode.node().children; + if ( htmlCollection ) { + var numEntries = htmlCollection.length; + for ( var q = 0; q < numEntries; q++ ) { + charSelectionNode.node().removeChild(htmlCollection[0]); + } + } + // datatypes kind of ignored by the elementsNeedCharacteristics function + // so we need to check if we are a node or not + if ( element.attributes().indexOf("external") > -1 ) { + // add external span to the div; + var externalCharSpan = charSelectionNode.append("span"); + externalCharSpan.classed("spanForCharSelection", true); + externalCharSpan.node().innerHTML = "external"; + } + var filterContainer, + filterCheckbox; + if ( elementTools.isNode(element) === true ) { + // add the deprecated characteristic; + var arrayOfNodeChars = ["deprecated"]; + for ( i = 0; i < arrayOfNodeChars.length; i++ ) { + filterContainer = charSelectionNode + .append("div") + .classed("checkboxContainer", true) + .style("padding-top", "2px"); + + filterCheckbox = filterContainer.append("input") + .classed("filterCheckbox", true) + .attr("id", "CharacteristicsCheckbox" + i) + .attr("type", "checkbox") + .attr("characteristics", arrayOfNodeChars[i]) + .property("checked", getPresentAttribute(element, arrayOfNodeChars[i])); + // + filterContainer.append("label") + .attr("for", "CharacteristicsCheckbox" + i) + .text(arrayOfNodeChars[i]); + + filterCheckbox.on("click", handleCheckBoxClick); + + } + } + + else { + // add the deprecated characteristic; + var arrayOfPropertyChars = ["deprecated", "inverse functional", "functional", "transitive"]; + if ( elementTools.isDatatypeProperty(element) === true ) { + arrayOfPropertyChars = ["deprecated", "functional"]; + } + for ( i = 0; i < arrayOfPropertyChars.length; i++ ) { + filterContainer = charSelectionNode + .append("div") + .classed("checkboxContainer", true) + .style("padding-top", "2px"); + + filterCheckbox = filterContainer.append("input") + .classed("filterCheckbox", true) + .attr("id", "CharacteristicsCheckbox" + i) + .attr("type", "checkbox") + .attr("characteristics", arrayOfPropertyChars[i]) + .property("checked", getPresentAttribute(element, arrayOfPropertyChars[i])); + // + filterContainer.append("label") + .attr("for", "CharacteristicsCheckbox" + i) + .text(arrayOfPropertyChars[i]); + + filterCheckbox.on("click", handleCheckBoxClick); + + } + } + + + } + + function getPresentAttribute( selectedElement, element ){ + return (selectedElement.attributes().indexOf(element) >= 0); + } + + function handleCheckBoxClick(){ + var checked = this.checked; + var char = this.getAttribute("characteristics"); + if ( checked === true ) { + addAttribute(selectedElementForCharacteristics, char); + } else { + removeAttribute(selectedElementForCharacteristics, char); + } + // graph.executeColorExternalsModule(); + selectedElementForCharacteristics.redrawElement(); + // workaround to have the node still be focused as rendering element + selectedElementForCharacteristics.focused(false); + selectedElementForCharacteristics.toggleFocus(); + + } + + + function addAttribute( selectedElement, char ){ + if ( selectedElement.attributes().indexOf(char) === -1 ) { + // not found add it + var attr = selectedElement.attributes(); + attr.push(char); + selectedElement.attributes(attr); + }// indications string update; + if ( selectedElement.indications().indexOf(char) === -1 ) { + var indications = selectedElement.indications(); + indications.push(char); + selectedElement.indications(indications); + } + // add visual attributes + var visAttr; + if ( selectedElement.visualAttributes().indexOf(char) === -1 ) { + visAttr = selectedElement.visualAttributes(); + visAttr.push(char); + selectedElement.visualAttributes(visAttr); + } + if ( getPresentAttribute(selectedElement, "external") && getPresentAttribute(selectedElement, "deprecated") ) { + visAttr = selectedElement.visualAttributes(); + var visInd = visAttr.indexOf("external"); + if ( visInd > -1 ) { + visAttr.splice(visInd, 1); + } + selectedElement.visualAttributes(visAttr); + } + + } + + function removeAttribute( selectedElement, element ){ + var attr = selectedElement.attributes(); + var indications = selectedElement.indications(); + var visAttr = selectedElement.visualAttributes(); + var attrInd = attr.indexOf(element); + if ( attrInd >= 0 ) { + attr.splice(attrInd, 1); + } + var indInd = indications.indexOf(element); + if ( indInd > -1 ) { + indications.splice(indInd, 1); + } + var visInd = visAttr.indexOf(element); + if ( visInd > -1 ) { + visAttr.splice(visInd, 1); + } + selectedElement.attributes(attr); + selectedElement.indications(indications); + selectedElement.visualAttributes(visAttr); + if ( element === "deprecated" ) { + // set its to its original Style + //typeBaseThign + // todo : fix all different types + if ( selectedElement.type() === "owl:Class" ) selectedElement.styleClass("class"); + if ( selectedElement.type() === "owl:DatatypeProperty" ) selectedElement.styleClass("datatypeproperty"); + if ( selectedElement.type() === "owl:ObjectProperty" ) selectedElement.styleClass("objectproperty"); + if ( selectedElement.type() === "owl:disjointWith" ) selectedElement.styleClass("disjointwith"); + } + } + + + function elementNeedsCharacteristics( element ){ + //TODO: Add more types + if ( element.type() === "owl:Thing" || + element.type() === "rdfs:subClassOf" || + element.type() === "rdfs:Literal" || + element.type() === "rdfs:Datatype" || + element.type() === "rdfs:disjointWith" ) + return false; + + // if (element.attributes().indexOf("external")|| + // element.attributes().indexOf("deprecated")) + // return true; + return true; + + } + + function elementTypeSelectionChanged( element ){ + if ( elementTools.isNode(element) ) { + if ( graph.changeNodeType(element) === false ) { + //restore old value + + if ( elementTools.isDatatype(element) === true ) { + + } + editSidebar.updateSelectionInformation(element); + } + } + + if ( elementTools.isProperty(element) ) { + if ( graph.changePropertyType(element) === false ) { + //restore old value + editSidebar.updateSelectionInformation(element); + + } + } + + } + + function getElementPrototypes( selectedElement ){ + var availiblePrototypes = []; + // TODO the text should be also complied with the prefixes loaded into the ontology + if ( elementTools.isProperty(selectedElement) ) { + if ( selectedElement.type() === "owl:DatatypeProperty" ) + availiblePrototypes.push("owl:DatatypeProperty"); + else { + availiblePrototypes.push("owl:ObjectProperty"); + // handling loops ! + if ( selectedElement.domain() !== selectedElement.range() ) { + availiblePrototypes.push("rdfs:subClassOf"); + } + availiblePrototypes.push("owl:disjointWith"); + availiblePrototypes.push("owl:allValuesFrom"); + availiblePrototypes.push("owl:someValuesFrom"); + } + return availiblePrototypes; + } + if ( selectedElement.renderType() === "rect" ) { + availiblePrototypes.push("rdfs:Literal"); + availiblePrototypes.push("rdfs:Datatype"); + } else { + availiblePrototypes.push("owl:Class"); + availiblePrototypes.push("owl:Thing"); + // TODO: ADD MORE TYPES + // availiblePrototypes.push("owl:complementOf"); + // availiblePrototypes.push("owl:disjointUnionOf"); + } + return availiblePrototypes; + } + + + function setupCollapsing(){ + // TODO : Decision , for now I want to have the control over the collapse expand operation of the + // TODO : elements, otherwise the old approach will also randomly collapse other containers + + // adapted version of this example: http://www.normansblog.de/simple-jquery-accordion/ + function collapseContainers( containers ){ + containers.classed("hidden", true); + } + + function expandContainers( containers ){ + containers.classed("hidden", false); + } + + var triggers = d3.selectAll(".accordion-trigger"); + + // Collapse all inactive triggers on startup + // collapseContainers(d3.selectAll(".accordion-trigger:not(.accordion-trigger-active) + div")); + + triggers.on("click", function (){ + var selectedTrigger = d3.select(this); + if ( selectedTrigger.classed("accordion-trigger-active") ) { + // Collapse the active (which is also the selected) trigger + collapseContainers(d3.select(selectedTrigger.node().nextElementSibling)); + selectedTrigger.classed("accordion-trigger-active", false); + } else { + // Collapse the other trigger ... + // collapseContainers(d3.selectAll(".accordion-trigger-active + div")); + + // ... and expand the selected one + expandContainers(d3.select(selectedTrigger.node().nextElementSibling)); + selectedTrigger.classed("accordion-trigger-active", true); + } + editSidebar.updateElementWidth(); + }); + } + + return editSidebar; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), + +/***/ 341: +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {module.exports = function ( graph ){ + var configMenu = {}, + checkboxes = []; + + + configMenu.setup = function (){ + var menuEntry = d3.select("#m_modes"); + menuEntry.on("mouseover", function (){ + var searchMenu = graph.options().searchMenu(); + searchMenu.hideSearchEntries(); + }); + + addCheckBox("showZoomSlider", "Zoom controls", "#zoomSliderOption", graph.options().zoomSlider().showSlider, 0); + addLabelWidthSlider("#maxLabelWidthSliderOption", "maxLabelWidth", "Max label width", graph.options().maxLabelWidth); + }; + + + function addLabelWidthSlider( selector, identifier, label, onChangeFunction ){ + var sliderContainer, + sliderValueLabel; + + sliderContainer = d3.select(selector) + .append("div") + .classed("distanceSliderContainer", true); + + var slider = sliderContainer.append("input") + .attr("id", identifier + "Slider") + .attr("type", "range") + .attr("min", 20) + .attr("max", 600) + .attr("value", onChangeFunction()) + .attr("step", 10); + sliderContainer.append("label") + .classed("description", true) + .attr("for", identifier + "Slider") + .attr("id", identifier + "DescriptionLabel") + .text(label); + sliderValueLabel = sliderContainer.append("label") + .classed("value", true) + .attr("for", identifier + "Slider") + .attr("id", identifier + "valueLabel") + .text(onChangeFunction()); + + slider.on("input", function (){ + var value = slider.property("value"); + onChangeFunction(value); + sliderValueLabel.text(value); + if ( graph.options().dynamicLabelWidth() === true ) + graph.animateDynamicLabelWidth(); + }); + + // add wheel event to the slider + slider.on("wheel", function (){ + if ( slider.node().disabled === true ) return; + var wheelEvent = d3.event; + var offset; + if ( wheelEvent.deltaY < 0 ) offset = 10; + if ( wheelEvent.deltaY > 0 ) offset = -10; + var oldVal = parseInt(slider.property("value")); + var newSliderValue = oldVal + offset; + if ( newSliderValue !== oldVal ) { + slider.property("value", newSliderValue); + onChangeFunction(newSliderValue); + slider.on("input")(); // << set text and update the graphStyles + } + d3.event.preventDefault(); + }); + } + + function addCheckBox( identifier, modeName, selector, onChangeFunc, updateLvl ){ + var configOptionContainer = d3.select(selector) + .append("div") + .classed("checkboxContainer", true); + var configCheckbox = configOptionContainer.append("input") + .classed("moduleCheckbox", true) + .attr("id", identifier + "ConfigCheckbox") + .attr("type", "checkbox") + .property("checked", onChangeFunc()); + + + configCheckbox.on("click", function ( silent ){ + var isEnabled = configCheckbox.property("checked"); + onChangeFunc(isEnabled); + if ( silent !== true ) { + // updating graph when silent is false or the parameter is not given. + if ( updateLvl === 1 ) { + graph.lazyRefresh(); + //graph.redrawWithoutForce + } + if ( updateLvl === 2 ) { + graph.update(); + } + + if ( updateLvl === 3 ) { + graph.updateDraggerElements(); + } + } + + }); + checkboxes.push(configCheckbox); + configOptionContainer.append("label") + .attr("for", identifier + "ConfigCheckbox") + .text(modeName); + } + + configMenu.setCheckBoxValue = function ( identifier, value ){ + for ( var i = 0; i < checkboxes.length; i++ ) { + var cbdId = checkboxes[i].attr("id"); + if ( cbdId === identifier ) { + checkboxes[i].property("checked", value); + break; + } + } + }; + + configMenu.getCheckBoxValue = function ( id ){ + for ( var i = 0; i < checkboxes.length; i++ ) { + var cbdId = checkboxes[i].attr("id"); + if ( cbdId === id ) { + return checkboxes[i].property("checked"); + } + } + }; + + configMenu.updateSettings = function (){ + var silent = true; + checkboxes.forEach(function ( checkbox ){ + checkbox.on("click")(silent); + }); + }; + + return configMenu; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), + +/***/ 342: +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {module.exports = function ( graph ){ + /** some constants **/ + var PREDEFINED = 0, + FILE_UPLOAD = 1, + JSON_URL = 2, + IRI_URL = 3; + + var PROGRESS_BAR_ERROR = 0, + PROGRESS_BAR_BUSY = 1, + PROGRESS_BAR_PERCENT = 2, + progressBarMode = 1; + + var loadingWasSuccessFul = false; + var missingImportsWarning = false; + var showLoadingDetails = false; + var visibilityStatus = true; + + var DEFAULT_JSON_NAME = "display"; // This file is loaded by default + var conversion_sessionId; + + /** variable defs **/ + var loadingModule = {}, + menuContainer = d3.select("#loading-info"), + loadingInfoContainer = d3.select("#loadingInfo-container"), + detailsButton = d3.select("#show-loadingInfo-button"), + closeButton = d3.select("#loadingIndicator_closeButton"), + ontologyMenu, + ontologyIdentifierFromURL; + + /** functon defs **/ + loadingModule.checkForScreenSize = function (){ + // checks for window size and adjusts the loading indicator + var w = graph.options().width(), + h = graph.options().height(); + + if ( w < 270 ) { + d3.select("#loading-info").classed("hidden", true); + } else { + // check if it should be visible + if ( visibilityStatus === true ) { + d3.select("#loading-info").classed("hidden", false); + } else { + d3.select("#loading-info").classed("hidden", true); + } + } + if ( h < 150 ) { + d3.select("#loadingInfo_msgBox").classed("hidden", true); + } else { + d3.select("#loadingInfo_msgBox").classed("hidden", false); + } + if ( h < 80 ) { + d3.select("#progressBarContext").classed("hidden", true); + d3.select("#layoutLoadingProgressBarContainer").style("height", "20px"); + } else { + d3.select("#progressBarContext").classed("hidden", false); + d3.select("#layoutLoadingProgressBarContainer").style("height", "50px"); + } + }; + + loadingModule.getMessageVisibilityStatus = function (){ + return visibilityStatus; + }; + + loadingModule.getProgressBarMode = function (){ + return progressBarMode; + }; + + loadingModule.successfullyLoadedOntology = function (){ + return loadingWasSuccessFul; + }; + + loadingModule.missingImportsWarning = function (){ + return missingImportsWarning; + }; + + loadingModule.setOntologyMenu = function ( m ){ + ontologyMenu = m; + }; + + loadingModule.showErrorDetailsMessage = function (){ + loadingModule.showLoadingIndicator(); + loadingModule.expandDetails(); + d3.select("#loadingIndicator_closeButton").classed("hidden", true); + loadingModule.scrollDownDetails(); + }; + + loadingModule.showWarningDetailsMessage = function (){ + d3.select("#currentLoadingStep").style("color", "#ff0"); + loadingModule.showLoadingIndicator(); + loadingModule.expandDetails(); + d3.select("#loadingIndicator_closeButton").classed("hidden", false); + loadingModule.scrollDownDetails(); + }; + + loadingModule.scrollDownDetails = function (){ + var scrollingElement = d3.select("#loadingInfo-container").node(); + scrollingElement.scrollTop = scrollingElement.scrollHeight; + }; + + loadingModule.hideLoadingIndicator = function (){ + d3.select("#loading-info").classed("hidden", true); + visibilityStatus = false; + }; + + loadingModule.showLoadingIndicator = function (){ + d3.select("#loading-info").classed("hidden", false); + visibilityStatus = true; + + }; + + /** -- SETUP -- **/ + loadingModule.setup = function (){ + // create connections for close and details button; + loadingInfoContainer.classed("hidden", !showLoadingDetails); + detailsButton.on("click", function (){ + showLoadingDetails = !showLoadingDetails; + loadingInfoContainer.classed("hidden", !showLoadingDetails); + detailsButton.classed("accordion-trigger-active", showLoadingDetails); + }); + + closeButton.on("click", function (){ + menuContainer.classed("hidden", true); + }); + loadingModule.setBusyMode(); + }; + + loadingModule.updateSize = function (){ + showLoadingDetails = !(loadingInfoContainer.classed("hidden")); + loadingInfoContainer.classed("hidden", !showLoadingDetails); + detailsButton.classed("accordion-trigger-active", showLoadingDetails); + }; + + loadingModule.getDetailsState = function (){ + return showLoadingDetails; + }; + + loadingModule.expandDetails = function (){ + showLoadingDetails = true; + loadingInfoContainer.classed("hidden", !showLoadingDetails); + detailsButton.classed("accordion-trigger-active", showLoadingDetails); + }; + + loadingModule.collapseDetails = function (){ + showLoadingDetails = false; + loadingInfoContainer.classed("hidden", !showLoadingDetails); + detailsButton.classed("accordion-trigger-active", showLoadingDetails); + }; + + loadingModule.setBusyMode = function (){ + d3.select("#currentLoadingStep").style("color", "#fff"); + d3.select("#progressBarValue").node().innherHTML = ""; + d3.select("#progressBarValue").style("width", "20%"); + d3.select("#progressBarValue").classed("busyProgressBar", true); + progressBarMode = PROGRESS_BAR_BUSY; + }; + + loadingModule.setSuccessful = function (){ + d3.select("#currentLoadingStep").style("color", "#0f0"); + }; + + loadingModule.setErrorMode = function (){ + d3.select("#currentLoadingStep").style("color", "#f00"); + d3.select("#progressBarValue").style("width", "0%"); + d3.select("#progressBarValue").classed("busyProgressBar", false); + d3.select("#progressBarValue").node().innherHTML = ""; + progressBarMode = PROGRESS_BAR_ERROR; + }; + + loadingModule.setPercentMode = function (){ + d3.select("#currentLoadingStep").style("color", "#fff"); + d3.select("#progressBarValue").classed("busyProgressBar", false); + d3.select("#progressBarValue").node().innherHTML = "0%"; + d3.select("#progressBarValue").style("width", "0%"); + progressBarMode = PROGRESS_BAR_PERCENT; + }; + + loadingModule.setPercentValue = function ( val ){ + d3.select("#progressBarValue").node().innherHTML = val; + }; + + loadingModule.emptyGraphContentError = function (){ + graph.clearGraphData(); + ontologyMenu.append_message_toLastBulletPoint("failed"); + ontologyMenu.append_message_toLastBulletPoint("
Error: Received empty graph"); + loadingWasSuccessFul = false; + graph.handleOnLoadingError(); + loadingModule.setErrorMode(); + }; + + loadingModule.isThreadCanceled = function (){ + + }; + + loadingModule.initializeLoader = function ( storeCache ){ + if ( storeCache === true && graph.getCachedJsonObj() !== null ) { + // save cached ontology; + var cachedContent = JSON.stringify(graph.getCachedJsonObj()); + var cachedName = ontologyIdentifierFromURL; + ontologyMenu.setCachedOntology(cachedName, cachedContent); + } + conversion_sessionId = -10000; + ontologyMenu.setConversionID(conversion_sessionId); + ontologyMenu.stopLoadingTimer(); + graph.clearGraphData(); + loadingModule.setBusyMode(); + loadingModule.showLoadingIndicator(); + loadingModule.collapseDetails(); + missingImportsWarning = false; + d3.select("#loadingIndicator_closeButton").classed("hidden", true); + ontologyMenu.clearDetailInformation(); + }; + + /** ------------------ URL Interpreter -------------- **/ + loadingModule.parseUrlAndLoadOntology = function ( storeCache ){ + var autoStore = true; + if ( storeCache === false ) { + autoStore = false; + } + + graph.clearAllGraphData(); + loadingModule.initializeLoader(autoStore); + var urlString = String(location); + var parameterArray = identifyParameter(urlString); + ontologyIdentifierFromURL = DEFAULT_JSON_NAME; + loadGraphOptions(parameterArray); // identifies and loads configuration values + var loadingMethod = identifyOntologyLoadingMethod(ontologyIdentifierFromURL); + d3.select("#progressBarValue").node().innerHTML = " "; + switch ( loadingMethod ) { + case 0: + loadingModule.from_presetOntology(ontologyIdentifierFromURL); + break; + case 1: + loadingModule.from_FileUpload(ontologyIdentifierFromURL); + break; + case 2: + loadingModule.from_JSON_URL(ontologyIdentifierFromURL); + break; + case 3: + loadingModule.from_IRI_URL(ontologyIdentifierFromURL); + break; + default: + console.log("Could not identify loading method , or not IMPLEMENTED YET"); + } + }; + + /** ------------------- LOADING --------------------- **/ + // the loading module splits into 3 branches + // 1] PresetOntology Loading + // 2] File Upload + // 3] Load From URL / IRI + + loadingModule.from_JSON_URL = function ( fileName ){ + var filename = decodeURIComponent(fileName.slice("url=".length)); + ontologyIdentifierFromURL = filename; + + var ontologyContent = ""; + if ( ontologyMenu.cachedOntology(filename) ) { + ontologyMenu.append_bulletPoint("Loading already cached ontology: " + filename); + ontologyContent = ontologyMenu.cachedOntology(filename); + loadingWasSuccessFul = true; // cached Ontology should be true; + parseOntologyContent(ontologyContent); + + } else { + // involve the o2v conveter; + ontologyMenu.append_message("Retrieving ontology from JSON URL " + filename); + requestServerTimeStampForJSON_URL(ontologyMenu.callbackLoad_JSON_FromURL, ["read?json=" + filename, filename]); + } + }; + + function requestServerTimeStampForJSON_URL( callback, parameter ){ + d3.xhr("serverTimeStamp", "application/text", function ( error, request ){ + if ( error ) { + // could not get server timestamp -> no connection to owl2vowl + ontologyMenu.append_bulletPoint("Could not establish connection to OWL2VOWL service"); + fallbackForJSON_URL(callback, parameter); + } else { + conversion_sessionId = request.responseText; + ontologyMenu.setConversionID(conversion_sessionId); + parameter.push(conversion_sessionId); + callback(parameter); + } + }); + + } + + loadingModule.requestServerTimeStampForDirectInput = function ( callback, text ){ + d3.xhr("serverTimeStamp", "application/text", function ( error, request ){ + if ( error ) { + // could not get server timestamp -> no connection to owl2vowl + ontologyMenu.append_bulletPoint("Could not establish connection to OWL2VOWL service"); + loadingModule.setErrorMode(); + ontologyMenu.append_message_toLastBulletPoint("
Could not connect to OWL2VOWL service "); + loadingModule.showErrorDetailsMessage(); + d3.select("#progressBarValue").style("width", "0%"); + d3.select("#progressBarValue").classed("busyProgressBar", false); + d3.select("#progressBarValue").text("0%"); + + } else { + conversion_sessionId = request.responseText; + ontologyMenu.setConversionID(conversion_sessionId); + callback(text, ["conversionID" + conversion_sessionId, conversion_sessionId]); + } + }); + }; + + loadingModule.from_IRI_URL = function ( fileName ){ + // owl2vowl converters the given ontology url and returns json file; + var filename = decodeURIComponent(fileName.slice("iri=".length)); + ontologyIdentifierFromURL = filename; + + var ontologyContent = ""; + if ( ontologyMenu.cachedOntology(filename) ) { + ontologyMenu.append_bulletPoint("Loading already cached ontology: " + filename); + ontologyContent = ontologyMenu.cachedOntology(filename); + loadingWasSuccessFul = true; // cached Ontology should be true; + parseOntologyContent(ontologyContent); + } else { + // involve the o2v conveter; + var encoded = encodeURIComponent(filename); + ontologyMenu.append_bulletPoint("Retrieving ontology from IRI: " + filename); + requestServerTimeStampForIRI_Converte(ontologyMenu.callbackLoad_Ontology_FromIRI, ["convert?iri=" + encoded, filename]); + } + }; + + loadingModule.fromFileDrop = function ( fileName, file ){ + d3.select("#progressBarValue").node().innerHTML = " "; + loadingModule.initializeLoader(false); + + ontologyMenu.append_bulletPoint("Retrieving ontology from dropped file: " + fileName); + var ontologyContent = ""; + + // two options here + //1] Direct Json Upload + if ( fileName.match(/\.json$/) ) { + ontologyMenu.setConversionID(-10000); + var reader = new FileReader(); + reader.readAsText(file); + reader.onload = function (){ + ontologyContent = reader.result; + ontologyIdentifierFromURL = fileName; + parseOntologyContent(ontologyContent); + }; + } else { + //2] File Upload to OWL2VOWL Converter + // 1) check if we can get a timeStamp; + var parameterArray = [file, fileName]; + requestServerTimeStamp(ontologyMenu.callbackLoadFromOntology, parameterArray); + } + }; + + + loadingModule.from_FileUpload = function ( fileName ){ + loadingModule.setBusyMode(); + var filename = decodeURIComponent(fileName.slice("file=".length)); + ontologyIdentifierFromURL = filename; + var ontologyContent = ""; + if ( ontologyMenu.cachedOntology(filename) ) { + ontologyMenu.append_bulletPoint("Loading already cached ontology: " + filename); + ontologyContent = ontologyMenu.cachedOntology(filename); + loadingWasSuccessFul = true; // cached Ontology should be true; + parseOntologyContent(ontologyContent); + + } else { + // d3.select("#currentLoadingStep").node().innerHTML="Loading ontology from file "+ filename; + ontologyMenu.append_bulletPoint("Retrieving ontology from file: " + filename); + // get the file + var selectedFile = d3.select("#file-converter-input").property("files")[0]; + // No selection -> this was triggered by the iri. Unequal names -> reuploading another file + if ( !selectedFile || (filename && (filename !== selectedFile.name)) ) { + ontologyMenu.append_message_toLastBulletPoint("
No cached version of \"" + filename + "\" was found.
Please reupload the file."); + loadingModule.setErrorMode(); + d3.select("#progressBarValue").classed("busyProgressBar", false); + graph.handleOnLoadingError(); + return; + } else { + filename = selectedFile.name; + } + + + // two options here + //1] Direct Json Upload + if ( filename.match(/\.json$/) ) { + ontologyMenu.setConversionID(-10000); + var reader = new FileReader(); + reader.readAsText(selectedFile); + reader.onload = function (){ + ontologyContent = reader.result; + ontologyIdentifierFromURL = filename; + parseOntologyContent(ontologyContent); + }; + } else { + //2] File Upload to OWL2VOWL Converter + // 1) check if we can get a timeStamp; + var parameterArray = [selectedFile, filename]; + requestServerTimeStamp(ontologyMenu.callbackLoadFromOntology, parameterArray); + } + } + }; + + function fallbackForJSON_URL( callback, parameter ){ + ontologyMenu.append_message_toLastBulletPoint("
Trying to convert with other communication protocol."); + callback(parameter); + + } + + function fallbackConversion( parameter ){ + ontologyMenu.append_message_toLastBulletPoint("
Trying to convert with other communication protocol."); + var file = parameter[0]; + var name = parameter[1]; + var formData = new FormData(); + formData.append("ontology", file); + + var xhr = new XMLHttpRequest(); + xhr.open("POST", "convert", true); + var ontologyContent = ""; + xhr.onload = function (){ + if ( xhr.status === 200 ) { + ontologyContent = xhr.responseText; + ontologyMenu.setCachedOntology(name, ontologyContent); + ontologyIdentifierFromURL = name; + missingImportsWarning = true; // using this variable for warnings + ontologyMenu.append_message_toLastBulletPoint("
Success, but you are using a deprecated OWL2VOWL service!"); + parseOntologyContent(ontologyContent); + } + }; + + // check what this thing is doing; + xhr.onreadystatechange = function (){ + if ( xhr.readyState === 4 && xhr.status === 0 ) { + ontologyMenu.append_message_toLastBulletPoint("
Old protocol also failed to establish connection to OWL2VOWL service!"); + loadingModule.setErrorMode(); + ontologyMenu.append_bulletPoint("Failed to load ontology"); + ontologyMenu.append_message_toLastBulletPoint("
Could not connect to OWL2VOWL service "); + loadingModule.showErrorDetailsMessage(); + } + }; + xhr.send(formData); + } + + function requestServerTimeStampForIRI_Converte( callback, parameterArray ){ + d3.xhr("serverTimeStamp", "application/text", function ( error, request ){ + loadingModule.setBusyMode(); + if ( error ) { + // could not get server timestamp -> no connection to owl2vowl + ontologyMenu.append_bulletPoint("Could not establish connection to OWL2VOWL service"); + loadingModule.setErrorMode(); + ontologyMenu.append_bulletPoint("Failed to load ontology"); + ontologyMenu.append_message_toLastBulletPoint("
Could not connect to OWL2VOWL service "); + loadingModule.showErrorDetailsMessage(); + } else { + conversion_sessionId = request.responseText; + ontologyMenu.setConversionID(conversion_sessionId); + // update paramater for new communication paradigm + parameterArray[0] = parameterArray[0] + "&sessionId=" + conversion_sessionId; + parameterArray.push(conversion_sessionId); + callback(parameterArray); + } + }); + } + + function requestServerTimeStamp( callback, parameterArray ){ + d3.xhr("serverTimeStamp", "application/text", function ( error, request ){ + if ( error ) { + // could not get server timestamp -> no connection to owl2vowl + ontologyMenu.append_bulletPoint("Could not establish connection to OWL2VOWL service"); + fallbackConversion(parameterArray); // tries o2v version0.3.4 communication + } else { + conversion_sessionId = request.responseText; + ontologyMenu.setConversionID(conversion_sessionId); + console.log("Request Session ID:" + conversion_sessionId); + callback(parameterArray[0], parameterArray[1], conversion_sessionId); + } + }); + } + + loadingModule.directInput = function ( text ){ + ontologyMenu.clearDetailInformation(); + parseOntologyContent(text); + }; + + loadingModule.loadFromOWL2VOWL = function ( ontoContent, filename ){ + loadingWasSuccessFul = false; + + var old = d3.select("#bulletPoint_container").node().innerHTML; + if ( old.indexOf("(with warnings)") !== -1 ) { + missingImportsWarning = true; + } + + if ( ontologyMenu.cachedOntology(ontoContent) ) { + ontologyMenu.append_bulletPoint("Loading already cached ontology: " + filename); + parseOntologyContent(ontoContent); + } else { // set parse the ontology content; + parseOntologyContent(ontoContent); + } + }; + + loadingModule.from_presetOntology = function ( selectedOntology ){ + ontologyMenu.append_bulletPoint("Retrieving ontology: " + selectedOntology); + loadPresetOntology(selectedOntology); + }; + + function loadPresetOntology( ontology ){ + // check if already cached in ontology menu? + var f2r; + var loadingNewOntologyForEditor=false; + if ( ontology.indexOf("new_ontology") !== -1 ) { + loadingModule.hideLoadingIndicator(); + graph.showEditorHintIfNeeded(); + f2r = "./data/new_ontology.json"; + loadingNewOntologyForEditor=true; + } + + loadingWasSuccessFul = false; + var ontologyContent = ""; + if ( ontologyMenu.cachedOntology(ontology) ) { + ontologyMenu.append_bulletPoint("Loading already cached ontology: " + ontology); + ontologyContent = ontologyMenu.cachedOntology(ontology); + loadingWasSuccessFul = true; // cached Ontology should be true; + loadingModule.showLoadingIndicator(); + parseOntologyContent(ontologyContent); + + } else { + // read the file name + + var fileToRead = "./data/" + ontology + ".json"; + if ( f2r ) { + fileToRead = f2r; + } // overwrite the newOntology Index + // read file + d3.xhr(fileToRead, "application/json", function ( error, request ){ + var loadingSuccessful = !error; + if ( loadingSuccessful ) { + ontologyContent = request.responseText; + parseOntologyContent(ontologyContent); + } else { + + if (loadingNewOntologyForEditor){ + ontologyContent = '{\n' + + ' "_comment": "Empty ontology for WebVOWL Editor",\n' + + ' "header": {\n' + + ' "languages": [\n' + + ' "en"\n' + + ' ],\n' + + ' "baseIris": [\n' + + ' "http://www.w3.org/2000/01/rdf-schema"\n' + + ' ],\n' + + ' "iri": "http://visualdataweb.org/newOntology/",\n' + + ' "title": {\n' + + ' "en": "New ontology"\n' + + ' },\n' + + ' "description": {\n' + + ' "en": "New ontology description"\n' + + ' }\n' + + ' },\n' + + ' "namespace": [],\n' + + ' "metrics": {\n' + + ' "classCount": 0,\n' + + ' "datatypeCount": 0,\n' + + ' "objectPropertyCount": 0,\n' + + ' "datatypePropertyCount": 0,\n' + + ' "propertyCount": 0,\n' + + ' "nodeCount": 0,\n' + + ' "individualCount": 0\n' + + ' }\n' + + '}\n'; + parseOntologyContent(ontologyContent); + }else{ + // some error occurred + ontologyMenu.append_bulletPoint("Failed to load: " + ontology); + if (error.status===0){ // assumption this is CORS error when running locally (error status == 0) + ontologyMenu.append_message_toLastBulletPoint(" ERROR STATUS: " + error.status); + if (window.location.toString().startsWith("file:/")){ + ontologyMenu.append_message_toLastBulletPoint("

WebVOWL runs in a local instance.

"); + ontologyMenu.append_message_toLastBulletPoint("

CORS prevents to automatically load files on host system.

"); + ontologyMenu.append_message_toLastBulletPoint("

You can load preprocessed ontologies (i.e. VOWL-JSON files) using the upload feature in the ontology menu or by dragging the files and dropping them on the canvas.

"); + ontologyMenu.append_message_toLastBulletPoint("

Hint: Note that the conversion of ontologies into the VOWL-JSON format is not part of WebVOWL but requires an additional converter such as OWL2VOWL.

"); + ontologyMenu.append_message_toLastBulletPoint("

Ontologies can be created using the editor mode (i.e. activate editing mode in Modes menu and create a new ontology using the Ontology menu.

"); + } + }else { + ontologyMenu.append_message_toLastBulletPoint(" ERROR STATUS: " + error.status); + } + + + + graph.handleOnLoadingError(); + loadingModule.setErrorMode(); + } + } + }); + } + } + + + /** -- PARSE JSON CONTENT -- **/ + function parseOntologyContent( content ){ + + ontologyMenu.append_bulletPoint("Reading ontology graph ... "); + var _loader = ontologyMenu.getLoadingFunction(); + _loader(content, ontologyIdentifierFromURL, "noAlternativeNameYet"); + } + + loadingModule.notValidJsonFile = function (){ + graph.clearGraphData(); + ontologyMenu.append_message_toLastBulletPoint(" failed"); + ontologyMenu.append_message_toLastBulletPoint("
Error: Received empty graph"); + loadingWasSuccessFul = false; + graph.handleOnLoadingError(); + + }; + + loadingModule.validJsonFile = function (){ + ontologyMenu.append_message_toLastBulletPoint("done"); + loadingWasSuccessFul = true; + }; + + + /** --- HELPER FUNCTIONS **/ + + function identifyParameter( url ){ + var numParameters = (url.match(/#/g) || []).length; + // create parameters array + var paramArray = []; + if ( numParameters > 0 ) { + var tokens = url.split("#"); + // skip the first token since it is the address of the server + for ( var i = 1; i < tokens.length; i++ ) { + if ( tokens[i].length === 0 ) { + // this token belongs actually to the last paramArray + paramArray[paramArray.length - 1] = paramArray[paramArray.length - 1] + "#"; + } else { + paramArray.push(tokens[i]); + } + } + } + return paramArray; + } + + + function loadGraphOptions( parameterArray ){ + var optString = "opts="; + + function loadDefaultConfig(){ + graph.options().setOptionsFromURL(graph.options().defaultConfig(), false); + } + + function loadCustomConfig( opts ){ + var changeEditingFlag = false; + var defObj = graph.options().defaultConfig(); + for ( var i = 0; i < opts.length; i++ ) { + var keyVal = opts[i].split('='); + if ( keyVal[0] === "editorMode" ) { + changeEditingFlag = true; + } + defObj[keyVal[0]] = keyVal[1]; + } + graph.options().setOptionsFromURL(defObj, changeEditingFlag); + } + + function identifyOptions( paramArray ){ + if ( paramArray[0].indexOf(optString) >= 0 ) { + // parse the parameters; + var parameterLength = paramArray[0].length; + var givenOptionsStr = paramArray[0].substr(5, parameterLength - 6); + var optionsArray = givenOptionsStr.split(';'); + loadCustomConfig(optionsArray); + } else { + ontologyIdentifierFromURL = paramArray[0]; + loadDefaultConfig(); + } + } + + function identifyOptionsAndOntology( paramArray ){ + + if ( paramArray[0].indexOf(optString) >= 0 ) { + // parse the parameters; + var parameterLength = paramArray[0].length; + var givenOptionsStr = paramArray[0].substr(5, parameterLength - 6); + var optionsArray = givenOptionsStr.split(';'); + loadCustomConfig(optionsArray); + } else { + loadDefaultConfig(); + } + ontologyIdentifierFromURL = paramArray[1]; + } + + switch ( parameterArray.length ) { + case 0: + loadDefaultConfig(); + break; + case 1: + identifyOptions(parameterArray); + break; + case 2: + identifyOptionsAndOntology(parameterArray); + break; + default : + console.log("To many input parameters , loading default config"); + loadDefaultConfig(); + ontologyIdentifierFromURL = "ERROR_TO_MANY_INPUT_PARAMETERS"; + } + } + + + function identifyOntologyLoadingMethod( url ){ + var iriKey = "iri="; + var urlKey = "url="; + var fileKey = "file="; + + var method = -1; + if ( url.substr(0, fileKey.length) === fileKey ) { + method = FILE_UPLOAD; + } else if ( url.substr(0, urlKey.length) === urlKey ) { + method = JSON_URL; + } else if ( url.substr(0, iriKey.length) === iriKey ) { + method = IRI_URL; + } else { + method = PREDEFINED; + } + return method; + } + + return loadingModule; + } + ; + + + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), + +/***/ 343: +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {module.exports = function ( graph ){ + /** variable defs **/ + var warningModule = {}; + var superContainer = d3.select("#WarningErrorMessages"); + var _messageContainers = []; + var _messageContext = []; + var _visibleStatus = []; + + var _filterHintId; + var _editorHintId; + var _messageId = -1; + superContainer.style("display", "inline-block"); + var cssStyleIndex = 0; + var styleSelectorIndex = 2; + + + // helper for standalone webvowl in chrome + function createCSSSelector( name, rules ){ + var style = document.createElement('style'); + style.type = 'text/css'; + document.getElementsByTagName('head')[0].appendChild(style); + if ( !(style.sheet || {}).insertRule ) + (style.styleSheet || style.sheet).addRule(name, rules); + else + style.sheet.insertRule(name + "{" + rules + "}", 0); + } + + + function findCSS_Index(){ + createCSSSelector("@keyframes msg_CollapseAnimation", " 0% { top: 0; } 100% { top: -400px;}"); + console.log(document.styleSheets ); + } + + findCSS_Index(); + + warningModule.addMessageBox = function (){ + + // add a container; + _messageId++; + var messageContainer = d3.select("#WarningErrorMessages").append("div"); + messageContainer.node().id = "messageContainerId_" + _messageId; + + var messageContext = messageContainer.append("div"); + messageContext.node().id = "messageContextId_" + _messageId; + messageContext.style("top", "0"); + messageContainer.style("position", "relative"); + messageContainer.style("width", "100%"); + //save in array + _messageContainers.push(messageContainer); + _messageContext.push(messageContext); + + // add animation to the container + messageContainer.node().addEventListener("animationend", _msgContainer_animationEnd); + + // set visible flag that is used in end of animation + _visibleStatus[_messageId] = true; + return _messageId; + }; + + function _msgContainer_animationEnd(){ + var containerId = this.id; + var tokens = containerId.split("_")[1]; + var mContainer = d3.select("#" + containerId); + // get number of children + mContainer.classed("hidden", !_visibleStatus[tokens]); + // clean up DOM + if ( !_visibleStatus[tokens] ) { + mContainer.remove(); + _messageContext[tokens] = null; + _messageContainers[tokens] = null; + } + // remove event listener + var c = d3.select(this); + // c.node().removeEventListener("animationend",_msgContainer_animationEnd); + } + + warningModule.createMessageContext = function ( id ){ + var warningContainer = _messageContext[id]; + var moduleContainer = _messageContainers[id]; + var generalHint = warningContainer.append('div'); + generalHint.node().innerHTML = ""; + _editorHintId = id; + /** Editing mode activated. You can now modify an existing ontology or create a new one via the ontology menu. You can save any ontology using the export menu (and exporting it as TTL file).**/ + generalHint.node().innerHTML += "Editing mode activated.
" + + "You can now modify an existing ontology or create a new one via the ontology menu.
" + + "You can save any ontology using the export menu (and exporting it as TTL file)."; + + generalHint.style("padding", "5px"); + generalHint.style("line-height", "1.2em"); + generalHint.style("font-size", "1.2em"); + + + var ul = warningContainer.append('ul'); + ul.append('li').node().innerHTML = "Create a class with double click / tap on empty canvas area."; + ul.append('li').node().innerHTML = "Edit names with double click / tap on element."; + ul.append('li').node().innerHTML = "Selection of default constructors is provided in the left sidebar."; + ul.append('li').node().innerHTML = "Additional editing functionality is provided in the right sidebar."; + + + var gotItButton = warningContainer.append("label"); + gotItButton.node().id = "killWarningErrorMessages_" + id; + gotItButton.node().innerHTML = "Got It"; + gotItButton.on("click", warningModule.closeMessage); + + moduleContainer.classed("hidden", false); + moduleContainer.style("-webkit-animation-name", "warn_ExpandAnimation"); + moduleContainer.style("-webkit-animation-duration", "0.5s"); + }; + + warningModule.showMessage = function ( id ){ + var moduleContainer = _messageContainers[id]; + moduleContainer.classed("hidden", false); + moduleContainer.style("-webkit-animation-name", "warn_ExpandAnimation"); + moduleContainer.style("-webkit-animation-duration", "0.5s"); + }; + + warningModule.closeMessage = function ( id ){ + var nId; + if ( id === undefined ) { + var givenId = this.id; + nId = givenId.split("_")[1]; + } else { + nId = id; + } + if ( id && id.indexOf("_") !== -1 ) { + nId = id.split("_")[1]; + } + _visibleStatus[nId] = false; + // get module; + var moduleContainer = _messageContainers[nId]; + moduleContainer.style("-webkit-animation-name", "warn_CollapseAnimation"); + moduleContainer.style("-webkit-animation-duration", "0.5s"); + + var m_height = moduleContainer.node().getBoundingClientRect().height; + + // find my id in the children + var pNode = moduleContainer.node().parentNode; + + var followingChildren = []; + var pChild = pNode.children; + var pChild_len = pChild.length; + var containerId = moduleContainer.node().id; + var found_me = false; + for ( var i = 0; i < pChild_len; i++ ) { + if ( found_me === true ) { + followingChildren.push(pChild[i].id); + } + + if ( containerId === pChild[i].id ) { + found_me = true; + } + } + + for ( var fc = 0; fc < followingChildren.length; fc++ ) { + var child = d3.select("#" + followingChildren[fc]); + // get the document style and overwrite it; + var superCss = document.styleSheets[styleSelectorIndex].cssRules[cssStyleIndex]; + // remove the existing 0% and 100% rules + superCss.deleteRule("0%"); + superCss.deleteRule("100%"); + + superCss.appendRule("0% {top: 0;}"); + superCss.appendRule("100% {top: -" + m_height + "px;"); + + child.style("-webkit-animation-name", "msg_CollapseAnimation"); + child.style("-webkit-animation-duration", "0.5s"); + child.node().addEventListener("animationend", _child_animationEnd); + } + }; + + function _child_animationEnd(){ + var c = d3.select(this); + c.style("-webkit-animation-name", ""); + c.style("-webkit-animation-duration", ""); + c.node().removeEventListener("animationend", _child_animationEnd); + } + + warningModule.closeFilterHint = function (){ + if ( _messageContainers[_filterHintId] ) { + _messageContainers[_filterHintId].classed("hidden", true); + _messageContainers[_filterHintId].remove(); + _messageContainers[_filterHintId] = null; + _messageContext[_filterHintId] = null; + _visibleStatus[_filterHintId] = false; + } + }; + + warningModule.showEditorHint = function (){ + var id = warningModule.addMessageBox(); + warningModule.createMessageContext(id); + }; + + warningModule.showExporterWarning=function (){ + warningModule.showWarning("Can not export ontology", "Detected unsupported ontology axioms, (e.g. owl:Union)", "Ontology is not exported", 1, false); + }; + + + + warningModule.responseWarning = function ( header, reason, action, callback, parameterArray, forcedWarning ){ + var id = warningModule.addMessageBox(); + var warningContainer = _messageContext[id]; + var moduleContainer = _messageContainers[id]; + _visibleStatus[id] = true; + d3.select("#blockGraphInteractions").classed("hidden", false); + var graphWidth = 0.5 * graph.options().width(); + + if ( header.length > 0 ) { + var head = warningContainer.append("div"); + head.style("padding", "5px"); + var titleHeader = head.append("div"); + // some classes + titleHeader.style("display", "inline-flex"); + titleHeader.node().innerHTML = "Warning:"; + titleHeader.style("padding-right", "3px"); + var msgHeader = head.append("div"); + // some classes + msgHeader.style("display", "inline-flex"); + msgHeader.style("max-width", graphWidth + "px"); + + msgHeader.node().innerHTML = header; + } + if ( reason.length > 0 ) { + var reasonContainer = warningContainer.append("div"); + reasonContainer.style("padding", "5px"); + var reasonHeader = reasonContainer.append("div"); + // some classes + reasonHeader.style("display", "inline-flex"); + reasonHeader.style("padding-right", "3px"); + + reasonHeader.node().innerHTML = "Reason:"; + var msgReason = reasonContainer.append("div"); + // some classes + msgReason.style("display", "inline-flex"); + msgReason.style("max-width", graphWidth + "px"); + msgReason.node().innerHTML = reason; + } + if ( action.length > 0 ) { + var actionContainer = warningContainer.append("div"); + actionContainer.style("padding", "5px"); + var actionHeader = actionContainer.append("div"); + // some classes + actionHeader.style("display", "inline-flex"); + actionHeader.style("padding-right", "8px"); + actionHeader.node().innerHTML = "Action:"; + var msgAction = actionContainer.append("div"); + // some classes + msgAction.style("display", "inline-flex"); + msgAction.style("max-width", graphWidth + "px"); + msgAction.node().innerHTML = action; + } + + var gotItButton = warningContainer.append("label"); + gotItButton.node().id = "killWarningErrorMessages_" + id; + gotItButton.node().innerHTML = "Continue"; + gotItButton.on("click", function (){ + warningModule.closeMessage(this.id); + d3.select("#blockGraphInteractions").classed("hidden", true); + callback(parameterArray[0], parameterArray[1], parameterArray[2], parameterArray[3]); + }); + warningContainer.append("span").node().innerHTML = "|"; + var cancelButton = warningContainer.append("label"); + cancelButton.node().id = "cancelButton_" + id; + cancelButton.node().innerHTML = "Cancel"; + cancelButton.on("click", function (){ + warningModule.closeMessage(this.id); + d3.select("#blockGraphInteractions").classed("hidden", true); + }); + moduleContainer.classed("hidden", false); + moduleContainer.style("-webkit-animation-name", "warn_ExpandAnimation"); + moduleContainer.style("-webkit-animation-duration", "0.5s"); + }; + + warningModule.showFilterHint = function (){ + var id = warningModule.addMessageBox(); + var warningContainer = _messageContext[id]; + var moduleContainer = _messageContainers[id]; + _visibleStatus[id] = true; + + _filterHintId = id; + var generalHint = warningContainer.append('div'); + /** Editing mode activated. You can now modify an existing ontology or create a new one via the ontology menu. You can save any ontology using the export menu (and exporting it as TTL file).**/ + generalHint.node().innerHTML = "Collapsing filter activated.
" + + "The number of visualized elements has been automatically reduced.
" + + "Use the degree of collapsing slider in the filter menu to adjust the visualization.

" + + "Note: A performance decrease could be experienced with a growing amount of visual elements in the graph."; + + + generalHint.style("padding", "5px"); + generalHint.style("line-height", "1.2em"); + generalHint.style("font-size", "1.2em"); + + var gotItButton = warningContainer.append("label"); + gotItButton.node().id = "killFilterMessages_" + id; + gotItButton.node().innerHTML = "Got It"; + gotItButton.on("click", warningModule.closeMessage); + + moduleContainer.classed("hidden", false); + moduleContainer.style("-webkit-animation-name", "warn_ExpandAnimation"); + moduleContainer.style("-webkit-animation-duration", "0.5s"); + }; + + warningModule.showMultiFileUploadWarning = function (){ + var id = warningModule.addMessageBox(); + var warningContainer = _messageContext[id]; + var moduleContainer = _messageContainers[id]; + _visibleStatus[id] = true; + + _filterHintId = id; + var generalHint = warningContainer.append('div'); + + generalHint.node().innerHTML = "Uploading multiple files is not supported.
"; + + generalHint.style("padding", "5px"); + generalHint.style("line-height", "1.2em"); + generalHint.style("font-size", "1.2em"); + + var gotItButton = warningContainer.append("label"); + gotItButton.node().id = "killFilterMessages_" + id; + gotItButton.node().innerHTML = "Got It"; + gotItButton.on("click", warningModule.closeMessage); + + moduleContainer.classed("hidden", false); + moduleContainer.style("-webkit-animation-name", "warn_ExpandAnimation"); + moduleContainer.style("-webkit-animation-duration", "0.5s"); + }; + + warningModule.showWarning = function ( header, reason, action, type, forcedWarning, additionalOpts ){ + var id = warningModule.addMessageBox(); + var warningContainer = _messageContext[id]; + var moduleContainer = _messageContainers[id]; + _visibleStatus[id] = true; + + // add new one; + var graphWidth = 0.5 * graph.options().width(); + + if ( header.length > 0 ) { + var head = warningContainer.append("div"); + head.style("padding", "5px"); + var titleHeader = head.append("div"); + // some classes + titleHeader.style("display", "inline-flex"); + titleHeader.node().innerHTML = "Warning:"; + titleHeader.style("padding-right", "3px"); + var msgHeader = head.append("div"); + // some classes + msgHeader.style("display", "inline-flex"); + msgHeader.style("max-width", graphWidth + "px"); + + msgHeader.node().innerHTML = header; + } + if ( reason.length > 0 ) { + var reasonContainer = warningContainer.append("div"); + reasonContainer.style("padding", "5px"); + var reasonHeader = reasonContainer.append("div"); + // some classes + reasonHeader.style("display", "inline-flex"); + reasonHeader.style("padding-right", "3px"); + + reasonHeader.node().innerHTML = "Reason:"; + var msgReason = reasonContainer.append("div"); + // some classes + msgReason.style("display", "inline-flex"); + msgReason.style("max-width", graphWidth + "px"); + msgReason.node().innerHTML = reason; + } + if ( action.length > 0 ) { + var actionContainer = warningContainer.append("div"); + actionContainer.style("padding", "5px"); + var actionHeader = actionContainer.append("div"); + // some classes + actionHeader.style("display", "inline-flex"); + actionHeader.style("padding-right", "8px"); + actionHeader.node().innerHTML = "Action:"; + var msgAction = actionContainer.append("div"); + // some classes + msgAction.style("display", "inline-flex"); + msgAction.style("max-width", graphWidth + "px"); + msgAction.node().innerHTML = action; + } + + var gotItButton; + if ( type === 1 ) { + gotItButton = warningContainer.append("label"); + gotItButton.node().id = "killWarningErrorMessages_" + id; + gotItButton.node().innerHTML = "Got It"; + gotItButton.on("click", warningModule.closeMessage); + } + + if ( type === 2 ) { + gotItButton = warningContainer.append("label"); + gotItButton.node().id = "killWarningErrorMessages_" + id; + gotItButton.node().innerHTML = "Got It"; + gotItButton.on("click", warningModule.closeMessage); + warningContainer.append("span").node().innerHTML = "|"; + var zoomToElementButton = warningContainer.append("label"); + zoomToElementButton.node().id = "zoomElementThing_" + id; + zoomToElementButton.node().innerHTML = "Zoom to element "; + zoomToElementButton.on("click", function (){ + // assume the additional Element is for halo; + graph.zoomToElementInGraph(additionalOpts); + }); + warningContainer.append("span").node().innerHTML = "|"; + var ShowElementButton = warningContainer.append("label"); + ShowElementButton.node().id = "showElementThing_" + id; + ShowElementButton.node().innerHTML = "Indicate element"; + ShowElementButton.on("click", function (){ + // assume the additional Element is for halo; + if ( additionalOpts.halo() === false ) { + additionalOpts.drawHalo(); + graph.updatePulseIds([additionalOpts.id()]); + } else { + additionalOpts.removeHalo(); + additionalOpts.drawHalo(); + graph.updatePulseIds([additionalOpts.id()]); + } + }); + } + moduleContainer.classed("hidden", false); + moduleContainer.style("-webkit-animation-name", "warn_ExpandAnimation"); + moduleContainer.style("-webkit-animation-duration", "0.5s"); + moduleContainer.classed("hidden", false); + }; + + return warningModule; + }; + + + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), + +/***/ 344: +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {module.exports = function ( graph ){ + /** variable defs **/ + var directInputModule = {}; + var inputContainer = d3.select("#DirectInputContent"); + inputContainer.style("top", "0"); + inputContainer.style("position", "absolute"); + var textArea = d3.select("#directInputTextArea"); + var visibleContainer = false; + + inputContainer.style("border", "1px solid black"); + inputContainer.style("padding", "5px"); + inputContainer.style("background", "#fff"); + + + // connect upload and close button; + directInputModule.handleDirectUpload = function (){ + + var text = textArea.node().value; + var jsonOBJ; + try { + jsonOBJ = JSON.parse(text); + graph.options().loadingModule().directInput(text); + // close if successful + if ( jsonOBJ.class.length > 0 ) { + directInputModule.setDirectInputMode(false); + } + } + catch ( e ) { + try { + // Initialize; + graph.options().loadingModule().initializeLoader(); + graph.options().loadingModule().requestServerTimeStampForDirectInput( + graph.options().ontologyMenu().callbackLoad_Ontology_From_DirectInput, text + ); + } catch ( error2 ) { + console.log("Error " + error2); + d3.select("#Error_onLoad").classed("hidden", false); + d3.select("#Error_onLoad").node().innerHTML = "Failed to convert the input!"; + } + } + }; + + directInputModule.handleCloseButton = function (){ + directInputModule.setDirectInputMode(false); + }; + + directInputModule.updateLayout = function (){ + var w = graph.options().width(); + var h = graph.options().height(); + textArea.style("width", 0.4 * w + "px"); + textArea.style("height", 0.7 * h + "px"); + }; + + directInputModule.setDirectInputMode = function ( val ){ + if ( !val ) { + visibleContainer = !visibleContainer; + } + else { + visibleContainer = val; + } + // update visibility; + directInputModule.updateLayout(); + d3.select("#Error_onLoad").classed("hidden", true); + inputContainer.classed("hidden", !visibleContainer); + }; + + + d3.select("#directUploadBtn").on("click", directInputModule.handleDirectUpload); + d3.select("#close_directUploadBtn").on("click", directInputModule.handleCloseButton); + + return directInputModule; + }; + + + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }) + +/******/ }); \ No newline at end of file diff --git a/webvowl/js/webvowl.js b/webvowl/js/webvowl.js new file mode 100644 index 0000000..cf6ea16 --- /dev/null +++ b/webvowl/js/webvowl.js @@ -0,0 +1,25345 @@ +webvowl = +/******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; + +/******/ // The require function +/******/ function __webpack_require__(moduleId) { + +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) +/******/ return installedModules[moduleId].exports; + +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ exports: {}, +/******/ id: moduleId, +/******/ loaded: false +/******/ }; + +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); + +/******/ // Flag the module as loaded +/******/ module.loaded = true; + +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } + + +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; + +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; + +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; + +/******/ // Load entry module and return exports +/******/ return __webpack_require__(0); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ (function(module, exports, __webpack_require__) { + + __webpack_require__(1); + + var nodeMap = __webpack_require__(5)(); + var propertyMap = __webpack_require__(40)(); + + + var webvowl = {}; + webvowl.graph = __webpack_require__(57); + webvowl.options = __webpack_require__(64); + webvowl.version = "1.1.7"; + + webvowl.util = {}; + webvowl.util.constants = __webpack_require__(12); + webvowl.util.languageTools = __webpack_require__(11); + webvowl.util.elementTools = __webpack_require__(63); + webvowl.util.prefixTools = __webpack_require__(72); + webvowl.modules = {}; + webvowl.modules.colorExternalsSwitch = __webpack_require__(73); + webvowl.modules.compactNotationSwitch = __webpack_require__(74); + webvowl.modules.datatypeFilter = __webpack_require__(75); + webvowl.modules.disjointFilter = __webpack_require__(77); + webvowl.modules.focuser = __webpack_require__(78); + webvowl.modules.emptyLiteralFilter = __webpack_require__(79); + webvowl.modules.nodeDegreeFilter = __webpack_require__(80); + webvowl.modules.nodeScalingSwitch = __webpack_require__(81); + webvowl.modules.objectPropertyFilter = __webpack_require__(82); + webvowl.modules.pickAndPin = __webpack_require__(83); + webvowl.modules.selectionDetailsDisplayer = __webpack_require__(315); + webvowl.modules.setOperatorFilter = __webpack_require__(316); + webvowl.modules.statistics = __webpack_require__(317); + webvowl.modules.subclassFilter = __webpack_require__(318); + + + webvowl.nodes = {}; + nodeMap.entries().forEach(function ( entry ){ + mapEntryToIdentifier(webvowl.nodes, entry); + }); + + webvowl.properties = {}; + propertyMap.entries().forEach(function ( entry ){ + mapEntryToIdentifier(webvowl.properties, entry); + }); + + function mapEntryToIdentifier( map, entry ){ + var identifier = entry.key.replace(":", "").toLowerCase(); + map[identifier] = entry.value; + } + + + module.exports = webvowl; + + +/***/ }), +/* 1 */ +/***/ (function(module, exports) { + + // removed by extract-text-webpack-plugin + +/***/ }), +/* 2 */, +/* 3 */, +/* 4 */, +/* 5 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {var nodes = []; + nodes.push(__webpack_require__(7)); + nodes.push(__webpack_require__(18)); + nodes.push(__webpack_require__(19)); + nodes.push(__webpack_require__(26)); + nodes.push(__webpack_require__(27)); + nodes.push(__webpack_require__(28)); + nodes.push(__webpack_require__(29)); + nodes.push(__webpack_require__(30)); + nodes.push(__webpack_require__(31)); + nodes.push(__webpack_require__(32)); + nodes.push(__webpack_require__(33)); + nodes.push(__webpack_require__(34)); + nodes.push(__webpack_require__(38)); + nodes.push(__webpack_require__(39)); + + var map = d3.map(nodes, function ( Prototype ){ + return new Prototype().type(); + }); + + module.exports = function (){ + return map; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), +/* 6 */ +/***/ (function(module, exports) { + + module.exports = d3; + +/***/ }), +/* 7 */ +/***/ (function(module, exports, __webpack_require__) { + + var RoundNode = __webpack_require__(8); + + module.exports = (function (){ + + var o = function ( graph ){ + RoundNode.apply(this, arguments); + + this.attributes(["external"]) + .type("ExternalClass"); + }; + o.prototype = Object.create(RoundNode.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 8 */ +/***/ (function(module, exports, __webpack_require__) { + + var BaseNode = __webpack_require__(9); + var CenteringTextElement = __webpack_require__(14); + var drawTools = __webpack_require__(17)(); + + module.exports = (function (){ + + var o = function ( graph ){ + BaseNode.apply(this, arguments); + + var that = this, + collapsible = false, + radius = 50, + collapsingGroupElement, + pinGroupElement, + haloGroupElement = null, + rectangularRepresentation = false, + renderingElement, + textBlock; + + this.setRectangularRepresentation = function ( val ){ + rectangularRepresentation = val; + }; + this.getRectangularRepresentation = function (){ + return rectangularRepresentation; + }; + + this.getHalos = function (){ + return haloGroupElement; + }; + + // Properties + this.collapsible = function ( p ){ + if ( !arguments.length ) return collapsible; + collapsible = p; + return this; + }; + + this.textBlock = function ( p ){ + if ( !arguments.length ) return textBlock; + textBlock = p; + return this; + }; + + /** + * This might not be equal to the actual radius, because the instance count is used for its calculation. + * @param p + * @returns {*} + */ + this.radius = function ( p ){ + if ( !arguments.length ) return radius; + radius = p; + return this; + }; + + + // Functions + this.setHoverHighlighting = function ( enable ){ + that.nodeElement().selectAll("circle").classed("hovered", enable); + }; + + this.textWidth = function ( yOffset ){ + var availableWidth = this.actualRadius() * 2; + + // if the text is not placed in the center of the circle, it can't have the full width + if ( yOffset ) { + var relativeOffset = Math.abs(yOffset) / this.actualRadius(); + var isOffsetInsideOfNode = relativeOffset <= 1; + + if ( isOffsetInsideOfNode ) { + availableWidth = Math.cos(relativeOffset) * availableWidth; + } else { + availableWidth = 0; + } + } + + return availableWidth; + }; + + this.toggleFocus = function (){ + that.focused(!that.focused()); + if ( that.nodeElement() ) + that.nodeElement().select("circle").classed("focused", that.focused()); + graph.resetSearchHighlight(); + graph.options().searchMenu().clearText(); + + }; + + this.actualRadius = function (){ + if ( !graph.options().scaleNodesByIndividuals() || that.individuals().length <= 0 ) { + return that.radius(); + } else { + // we could "listen" for radius and maxIndividualCount changes, but this is easier + var MULTIPLIER = 8, + additionalRadius = Math.log(that.individuals().length + 1) * MULTIPLIER + 5; + + return that.radius() + additionalRadius; + } + }; + + this.distanceToBorder = function (){ + return that.actualRadius(); + }; + + this.removeHalo = function (){ + if ( that.halo() ) { + that.halo(false); + if ( haloGroupElement ) { + haloGroupElement.remove(); + } + } + }; + + this.drawHalo = function ( pulseAnimation ){ + that.halo(true); + if ( rectangularRepresentation === true ) { + haloGroupElement = drawTools.drawRectHalo(that.nodeElement(), 80, 80, 5); + } else { + haloGroupElement = drawTools.drawHalo(that.nodeElement(), that.actualRadius(), this.removeHalo); + } + if ( pulseAnimation === false ) { + var pulseItem = haloGroupElement.selectAll(".searchResultA"); + pulseItem.classed("searchResultA", false); + pulseItem.classed("searchResultB", true); + pulseItem.attr("animationRunning", false); + } + }; + + /** + * Draws the pin on a round node on a position depending on its radius. + */ + this.drawPin = function (){ + that.pinned(true); + var dx = (-3.5 / 5) * that.actualRadius(), + dy = (-7 / 10) * that.actualRadius(); + pinGroupElement = drawTools.drawPin(that.nodeElement(), dx, dy, this.removePin, graph.options().showDraggerObject, graph.options().useAccuracyHelper()); + + + }; + + /** + * Removes the pin and refreshs the graph to update the force layout. + */ + this.removePin = function (){ + that.pinned(false); + if ( pinGroupElement ) { + pinGroupElement.remove(); + } + graph.updateStyle(); + }; + + this.drawCollapsingButton = function (){ + + collapsingGroupElement = that.nodeElement() + .append("g") + .classed("hidden-in-export", true) + .attr("transform", function (){ + var dx = (-2 / 5) * that.actualRadius(), + dy = (1 / 2) * that.actualRadius(); + return "translate(" + dx + "," + dy + ")"; + }); + + collapsingGroupElement.append("rect") + .classed("class pin feature", true) + .attr("x", 0) + .attr("y", 0) + .attr("width", 40) + .attr("height", 24); + + collapsingGroupElement.append("line") + .attr("x1", 13) + .attr("y1", 12) + .attr("x2", 27) + .attr("y2", 12); + + collapsingGroupElement.append("line") + .attr("x1", 20) + .attr("y1", 6) + .attr("x2", 20) + .attr("y2", 18); + }; + + /** + * Draws a circular node. + * @param parentElement the element to which this node will be appended + * @param [additionalCssClasses] additional css classes + */ + this.draw = function ( parentElement, additionalCssClasses ){ + var cssClasses = that.collectCssClasses(); + that.nodeElement(parentElement); + + var bgColor = that.backgroundColor(); + if ( bgColor === null ) bgColor = undefined; + if ( that.attributes().indexOf("deprecated") > -1 ) { + bgColor = undefined; + } + if ( additionalCssClasses instanceof Array ) { + cssClasses = cssClasses.concat(additionalCssClasses); + } + if ( rectangularRepresentation === true ) { + renderingElement = drawTools.appendRectangularClass(parentElement, 80, 80, cssClasses, that.labelForCurrentLanguage(), bgColor); + } else { + renderingElement = drawTools.appendCircularClass(parentElement, that.actualRadius(), cssClasses, that.labelForCurrentLanguage(), bgColor); + } + that.postDrawActions(parentElement); + }; + + this.redrawElement = function (){ + renderingElement.remove(); + textBlock.remove(); + var bgColor = that.backgroundColor(); + if ( that.attributes().indexOf("deprecated") > -1 ) { + bgColor = undefined; + } + + var cssClasses = that.collectCssClasses(); + + if ( rectangularRepresentation === true ) { + renderingElement = drawTools.appendRectangularClass(that.nodeElement(), 80, 80, cssClasses, that.labelForCurrentLanguage(), bgColor); + } else { + renderingElement = drawTools.appendCircularClass(that.nodeElement(), that.actualRadius(), cssClasses, that.labelForCurrentLanguage(), bgColor); + } + that.postDrawActions(that.nodeElement()); + }; + /** + * Common actions that should be invoked after drawing a node. + */ + this.postDrawActions = function (){ + that.textBlock(createTextBlock()); + + that.addMouseListeners(); + if ( that.pinned() ) { + that.drawPin(); + } + if ( that.halo() ) { + that.drawHalo(false); + } + if ( that.collapsible() ) { + that.drawCollapsingButton(); + } + }; + + this.redrawLabelText = function (){ + that.textBlock().remove(); + that.textBlock(createTextBlock()); + renderingElement.select("title").text(that.labelForCurrentLanguage()); + }; + function createTextBlock(){ + var bgColor = that.backgroundColor(); + if ( that.attributes().indexOf("deprecated") > -1 ) + bgColor = undefined; + + var textBlock = new CenteringTextElement(that.nodeElement(), bgColor); + + var equivalentsString = that.equivalentsString(); + var suffixForFollowingEquivalents = equivalentsString ? "," : ""; + + textBlock.addText(that.labelForCurrentLanguage(), "", suffixForFollowingEquivalents); + textBlock.addEquivalents(equivalentsString); + if ( !graph.options().compactNotation() ) { + textBlock.addSubText(that.indicationString()); + } + textBlock.addInstanceCount(that.individuals().length); + + return textBlock; + } + + this.equivalentsString = function (){ + var equivalentClasses = that.equivalents(); + if ( !equivalentClasses ) { + return; + } + + return equivalentClasses + .map(function ( node ){ + return node.labelForCurrentLanguage(); + }) + .join(", "); + }; + }; + o.prototype = Object.create(BaseNode.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 9 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {var BaseElement = __webpack_require__(10); + var forceLayoutNodeFunctions = __webpack_require__(13)(); + + module.exports = (function (){ + + var Base = function ( graph ){ + BaseElement.apply(this, arguments); + + var that = this, + // Basic attributes + complement, + disjointUnion, + disjointWith, + individuals = [], + intersection, + union, + links, + rendertype = "round", + // Additional attributes + maxIndividualCount, + fobj, // foreigner object for editing + ignoreLocalHoverEvents = false, + backupFullIri, + // Element containers + nodeElement; + + // array to store my properties; // we will need this also later for semantic zooming stuff + var assignedProperties = []; + that.editingTextElement = false; + + this.isPropertyAssignedToThisElement = function ( property ){ + // this goes via IRIS + console.log("Element IRI :" + property.iri()); + if ( property.type() === "rdfs:subClassOf" ) + for ( var i = 0; i < assignedProperties.length; i++ ) { + var iriEl = assignedProperties[i].iri(); + if ( property.iri() === iriEl ) { + return true; + } + if ( property.type() === "rdfs:subClassOf" && assignedProperties[i].type() === "rdfs:subClassOf" ) + return true; + if ( property.type() === "owl:disjointWith" && assignedProperties[i].type() === "owl:disjointWith" ) + return true; + + } + return false; + }; + + + this.existingPropertyIRI = function ( url ){ + // this goes via IRIS + for ( var i = 0; i < assignedProperties.length; i++ ) { + var iriEl = assignedProperties[i].iri(); + if ( iriEl === url ) { + return true; + } + } + return false; + }; + + this.addProperty = function ( property ){ + if ( assignedProperties.indexOf(property) === -1 ) { + assignedProperties.push(property); + } + }; + + this.removePropertyElement = function ( property ){ + // console.log("Calling removing old property!"+ property.iri()); + if ( assignedProperties.indexOf(property) !== -1 ) { + // console.log("Found it!"); + assignedProperties.splice(assignedProperties.indexOf(property), 1); + } + }; + this.getMyProperties = function (){ + return assignedProperties; + }; + this.copyOtherProperties = function ( otherProperties ){ + assignedProperties = otherProperties; + }; + + this.copyInformation = function ( other ){ + console.log(other.labelForCurrentLanguage()); + if ( other.type() !== "owl:Thing" ) + that.label(other.label()); + that.complement(other.complement()); + that.iri(other.iri()); + that.copyOtherProperties(other.getMyProperties()); + that.baseIri(other.baseIri()); + if ( other.type() === "owl:Class" ) { + that.backupLabel(other.label()); + // console.log("copied backup label"+that.backupLabel()); + } + if ( other.backupLabel() !== undefined ) { + that.backupLabel(other.backupLabel()); + } + }; + + this.enableEditing = function ( autoEditing ){ + if ( autoEditing === false ) + return; + that.raiseDoubleClickEdit(true); + }; + + this.raiseDoubleClickEdit = function ( forceIRISync ){ + d3.selectAll(".foreignelements").remove(); + if ( nodeElement === undefined || this.type() === "owl:Thing" || this.type() === "rdfs:Literal" ) { + console.log("No Container found"); + return; + } + if ( fobj !== undefined ) { + nodeElement.selectAll(".foreignelements").remove(); + } + + backupFullIri = undefined; + graph.options().focuserModule().handle(undefined); + graph.options().focuserModule().handle(that); + // add again the editing elements to that one + if ( graph.isTouchDevice() === true ) { + graph.activateHoverElements(true, that, true); + } + that.editingTextElement = true; + ignoreLocalHoverEvents = true; + that.nodeElement().selectAll("circle").classed("hoveredForEditing", true); + graph.killDelayedTimer(); + graph.ignoreOtherHoverEvents(false); + fobj = nodeElement.append("foreignObject") + .attr("x", -0.5 * (that.textWidth() - 2)) + .attr("y", -12) + .attr("height", 30) + .attr("class", "foreignelements") + .on("dragstart", function (){ + return false; + }) // remove drag operations of text element) + .attr("width", that.textWidth() - 2); + + var editText = fobj.append("xhtml:input") + .attr("class", "nodeEditSpan") + .attr("id", that.id()) + .attr("align", "center") + .attr("contentEditable", "true") + .on("dragstart", function (){ + return false; + }); // remove drag operations of text element) + + var bgColor = '#f00'; + var txtWidth = that.textWidth() - 2; + editText.style({ + + 'align': 'center', + 'color': 'black', + 'width': txtWidth + "px", + 'height': '15px', + 'background-color': bgColor, + 'border-bottom': '2px solid black' + }); + var txtNode = editText.node(); + txtNode.value = that.labelForCurrentLanguage(); + txtNode.focus(); + txtNode.select(); + that.frozen(true); // << releases the not after selection + that.locked(true); + + + d3.event.stopPropagation(); + // ignoreNodeHoverEvent=true; + // // add some events that relate to this object + editText.on("click", function (){ + d3.event.stopPropagation(); + }); + // // remove hover Events for now; + editText.on("mouseout", function (){ + d3.event.stopPropagation(); + + + }); + editText.on("mousedown", function (){ + d3.event.stopPropagation(); + }) + .on("keydown", function (){ + d3.event.stopPropagation(); + if ( d3.event.keyCode === 13 ) { + this.blur(); + that.frozen(false); // << releases the not after selection + that.locked(false); + } + }) + .on("keyup", function (){ + if ( forceIRISync ) { + var labelName = editText.node().value; + var resourceName = labelName.replaceAll(" ", "_"); + var syncedIRI = that.baseIri() + resourceName; + backupFullIri = syncedIRI; + + d3.select("#element_iriEditor").node().title = syncedIRI; + d3.select("#element_iriEditor").node().value = graph.options().prefixModule().getPrefixRepresentationForFullURI(syncedIRI); + } + d3.select("#element_labelEditor").node().value = editText.node().value; + + }) + .on("blur", function (){ + that.editingTextElement = false; + ignoreLocalHoverEvents = false; + that.nodeElement().selectAll("circle").classed("hoveredForEditing", false); + var newLabel = editText.node().value; + nodeElement.selectAll(".foreignelements").remove(); + // that.setLabelForCurrentLanguage(classNameConvention(editText.node().value)); + that.label(newLabel); + that.backupLabel(newLabel); + that.redrawLabelText(); + that.frozen(graph.paused()); + that.locked(graph.paused()); + graph.ignoreOtherHoverEvents(false); + // console.log("Calling blur on Node!"); + if ( backupFullIri ) { + var sanityCheckResult = graph.checkIfIriClassAlreadyExist(backupFullIri); + if ( sanityCheckResult === false ) { + that.iri(backupFullIri); + } else { + // throw warnign + graph.options().warningModule().showWarning("Already seen this class", + "Input IRI: " + backupFullIri + " for element: " + that.labelForCurrentLanguage() + " already been set", + "Restoring previous IRI for Element : " + that.iri(), 2, false, sanityCheckResult); + + } + } + if ( graph.isADraggerActive() === false ) { + graph.options().focuserModule().handle(undefined); + graph.options().focuserModule().handle(that); + } + }); // add a foreiner element to this thing; + }; + + + this.renderType = function ( t ){ + if ( !arguments.length ) return rendertype; + rendertype = t; + return this; + }; + // Properties + this.complement = function ( p ){ + if ( !arguments.length ) return complement; + complement = p; + return this; + }; + + this.disjointUnion = function ( p ){ + if ( !arguments.length ) return disjointUnion; + disjointUnion = p; + return this; + }; + + this.disjointWith = function ( p ){ + if ( !arguments.length ) return disjointWith; + disjointWith = p; + return this; + }; + + this.individuals = function ( p ){ + if ( !arguments.length ) return individuals; + individuals = p || []; + return this; + }; + + this.intersection = function ( p ){ + if ( !arguments.length ) return intersection; + intersection = p; + return this; + }; + + this.links = function ( p ){ + if ( !arguments.length ) return links; + links = p; + return this; + }; + + this.maxIndividualCount = function ( p ){ + if ( !arguments.length ) return maxIndividualCount; + maxIndividualCount = p; + return this; + }; + + this.nodeElement = function ( p ){ + if ( !arguments.length ) return nodeElement; + nodeElement = p; + return this; + }; + + this.union = function ( p ){ + if ( !arguments.length ) return union; + union = p; + return this; + }; + + + /** + * Returns css classes generated from the data of this object. + * @returns {Array} + */ + that.collectCssClasses = function (){ + var cssClasses = []; + + if ( typeof that.styleClass() === "string" ) { + cssClasses.push(that.styleClass()); + } + + cssClasses = cssClasses.concat(that.visualAttributes()); + + return cssClasses; + }; + + + // Reused functions TODO refactor + this.addMouseListeners = function (){ + // Empty node + if ( !that.nodeElement() ) { + console.warn(this); + return; + } + + that.nodeElement().selectAll("*") + .on("mouseover", onMouseOver) + .on("mouseout", onMouseOut); + }; + + this.animationProcess = function (){ + var animRuns = false; + if ( that.getHalos() ) { + var haloGr = that.getHalos(); + var haloEls = haloGr.selectAll(".searchResultA"); + animRuns = haloGr.attr("animationRunning"); + if ( typeof animRuns !== "boolean" ) { + // parse this to a boolean value + animRuns = (animRuns === 'true'); + } + if ( animRuns === false ) { + haloEls.classed("searchResultA", false); + haloEls.classed("searchResultB", true); + } + } + return animRuns; + }; + + this.foreground = function (){ + var selectedNode = that.nodeElement().node(), + nodeContainer = selectedNode.parentNode; + // check if the halo is present and an animation is running + if ( that.animationProcess() === false ) { + // Append hovered element as last child to the container list. + nodeContainer.appendChild(selectedNode); + } + + }; + + function onMouseOver(){ + if ( that.mouseEntered() || ignoreLocalHoverEvents === true ) { + return; + } + + var selectedNode = that.nodeElement().node(), + nodeContainer = selectedNode.parentNode; + + // Append hovered element as last child to the container list. + if ( that.animationProcess() === false ) { + nodeContainer.appendChild(selectedNode); + } + if ( graph.isTouchDevice() === false ) { + that.setHoverHighlighting(true); + that.mouseEntered(true); + if ( graph.editorMode() === true && graph.ignoreOtherHoverEvents() === false ) { + graph.activateHoverElements(true, that); + } + } else { + if ( graph.editorMode() === true && graph.ignoreOtherHoverEvents() === false ) { + graph.activateHoverElements(true, that, true); + } + + } + + + } + + function onMouseOut(){ + that.setHoverHighlighting(false); + that.mouseEntered(false); + if ( graph.editorMode() === true && graph.ignoreOtherHoverEvents() === false ) { + graph.activateHoverElements(false); + } + } + + + forceLayoutNodeFunctions.addTo(this); + }; + + Base.prototype = Object.create(BaseElement.prototype); + Base.prototype.constructor = Base; + + + return Base; + }()); + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), +/* 10 */ +/***/ (function(module, exports, __webpack_require__) { + + /** + * The base element for all visual elements of webvowl. + */ + module.exports = (function (){ + + var Base = function ( graph ){ + // Basic attributes + var equivalents = [], + id, + label, + type, + iri, + baseIri, + // Additional attributes + annotations, + attributes = [], + backgroundColor, + comment, + description, + equivalentBase, + visualAttributes = [], + // Style attributes + focused = false, + indications = [], + mouseEntered = false, + styleClass, + visible = true, + + backupLabel, + // Other + languageTools = __webpack_require__(11)(); + + + this.backupLabel = function ( label ){ + if ( !arguments.length ) return backupLabel; + backupLabel = label; + }; + // Properties + this.attributes = function ( p ){ + if ( !arguments.length ) return attributes; + attributes = p; + return this; + }; + + this.annotations = function ( p ){ + if ( !arguments.length ) return annotations; + annotations = p; + return this; + }; + + this.redrawElement = function (){ + // TODO: OVERLOADED BY INDIVIDUAL ELEMENTS + }; + + this.backgroundColor = function ( p ){ + if ( !arguments.length ) return backgroundColor; + backgroundColor = p; + return this; + }; + + this.baseIri = function ( p ){ + if ( !arguments.length ) return baseIri; + baseIri = p; + return this; + }; + + this.comment = function ( p ){ + if ( !arguments.length ) return comment; + comment = p; + return this; + }; + + this.description = function ( p ){ + if ( !arguments.length ) return description; + description = p; + return this; + }; + + this.equivalents = function ( p ){ + if ( !arguments.length ) return equivalents; + equivalents = p || []; + return this; + }; + + this.equivalentBase = function ( p ){ + if ( !arguments.length ) return equivalentBase; + equivalentBase = p; + return this; + }; + + this.focused = function ( p ){ + if ( !arguments.length ) return focused; + focused = p; + return this; + }; + + this.id = function ( p ){ + if ( !arguments.length ) return id; + id = p; + return this; + }; + + this.indications = function ( p ){ + if ( !arguments.length ) return indications; + indications = p; + return this; + }; + + this.iri = function ( p ){ + if ( !arguments.length ) return iri; + iri = p; + return this; + }; + + this.label = function ( p ){ + if ( !arguments.length ) return label; + label = p; + return this; + }; + + this.mouseEntered = function ( p ){ + if ( !arguments.length ) return mouseEntered; + mouseEntered = p; + return this; + }; + + this.styleClass = function ( p ){ + if ( !arguments.length ) return styleClass; + styleClass = p; + return this; + }; + + this.type = function ( p ){ + if ( !arguments.length ) return type; + type = p; + return this; + }; + + this.visible = function ( p ){ + if ( !arguments.length ) return visible; + visible = p; + return this; + }; + + this.visualAttributes = function ( p ){ + if ( !arguments.length ) return visualAttributes; + visualAttributes = p; + return this; + }; + + + this.commentForCurrentLanguage = function (){ + return languageTools.textInLanguage(this.comment(), graph.language()); + }; + + /** + * @returns {string} the css class of this node.. + */ + this.cssClassOfNode = function (){ + return "node" + this.id(); + }; + + this.descriptionForCurrentLanguage = function (){ + return languageTools.textInLanguage(this.description(), graph.language()); + }; + + this.defaultLabel = function (){ + return languageTools.textInLanguage(this.label(), "default"); + }; + + this.indicationString = function (){ + return this.indications().join(", "); + }; + + this.labelForCurrentLanguage = function (){ + var preferredLanguage = graph && graph.language ? graph.language() : null; + return languageTools.textInLanguage(this.label(), preferredLanguage); + }; + }; + + Base.prototype.constructor = Base; + + Base.prototype.equals = function ( other ){ + return other instanceof Base && this.id() === other.id(); + }; + + Base.prototype.toString = function (){ + return this.labelForCurrentLanguage() + " (" + this.type() + ")"; + }; + + + return Base; + }()); + + +/***/ }), +/* 11 */ +/***/ (function(module, exports, __webpack_require__) { + + var constants = __webpack_require__(12)(); + + /** + * Encapsulates methods which return a label in a specific language for a preferred language. + */ + module.exports = (function (){ + + var languageTools = {}; + + + languageTools.textInLanguage = function ( textObject, preferredLanguage ){ + if ( typeof textObject === "undefined" ) { + return undefined; + } + + if ( typeof textObject === "string" ) { + return textObject; + } + + if ( preferredLanguage && textObject.hasOwnProperty(preferredLanguage) ) { + return textObject[preferredLanguage]; + } + + var textForLanguage = searchLanguage(textObject, "en"); + if ( textForLanguage ) { + return textForLanguage; + } + textForLanguage = searchLanguage(textObject, constants.LANG_UNDEFINED); + if ( textForLanguage ) { + return textForLanguage; + } + + return textObject[constants.LANG_IRIBASED]; + }; + + + function searchLanguage( textObject, preferredLanguage ){ + for ( var language in textObject ) { + if ( language === preferredLanguage && textObject.hasOwnProperty(language) ) { + return textObject[language]; + } + } + } + + return function (){ + /* Use a function here to keep a consistent style like webvowl.path.to.module() + * despite having just a single languageTools object. */ + return languageTools; + }; + })(); + + +/***/ }), +/* 12 */ +/***/ (function(module, exports) { + + module.exports = (function (){ + + var constants = {}; + + constants.LANG_IRIBASED = "IRI-based"; + constants.LANG_UNDEFINED = "undefined"; + + return function (){ + /* Use a function here to keep a consistent style like webvowl.path.to.module() + * despite having just a single object. */ + return constants; + }; + })(); + + +/***/ }), +/* 13 */ +/***/ (function(module, exports) { + + /** + * The functions for controlling attributes of nodes of the force layout can't be modelled to the element hierarchy, + * which is used for inheriting visual and OWL-like attributes. + * + * To reduce code redundancy the common functions for controlling the force layout node attributes are excluded into this + * module, which can add them to the node objects. + * + * @type {{}} + */ + var nodeFunctions = {}; + module.exports = function (){ + return nodeFunctions; + }; + + + nodeFunctions.addTo = function ( node ){ + addFixedLocationFunctions(node); + }; + + function addFixedLocationFunctions( node ){ + var locked = false, + frozen = false, + halo = false, + pinned = false; + + node.locked = function ( p ){ + if ( !arguments.length ) { + return locked; + } + locked = p; + applyFixedLocationAttributes(); + return node; + }; + + node.frozen = function ( p ){ + if ( !arguments.length ) { + return frozen; + } + frozen = p; + applyFixedLocationAttributes(); + return node; + }; + + node.halo = function ( p ){ + if ( !arguments.length ) { + return halo; + } + halo = p; + applyFixedLocationAttributes(); + return node; + }; + + node.pinned = function ( p ){ + if ( !arguments.length ) { + return pinned; + } + pinned = p; + applyFixedLocationAttributes(); + return node; + }; + + function applyFixedLocationAttributes(){ + if ( node.locked() || node.frozen() || node.pinned() ) { + node.fixed = true; + } else { + node.fixed = false; + } + } + } + + +/***/ }), +/* 14 */ +/***/ (function(module, exports, __webpack_require__) { + + var textTools = __webpack_require__(15)(); + var AbstractTextElement = __webpack_require__(16); + + module.exports = CenteringTextElement; + function CenteringTextElement( container, backgroundColor ){ + AbstractTextElement.apply(this, arguments); + this.storedFullTextLines = []; + this.storedSpanArrays = []; + this.storedStyle = []; + + } + + CenteringTextElement.prototype = Object.create(AbstractTextElement.prototype); + CenteringTextElement.prototype.constructor = CenteringTextElement; + + CenteringTextElement.prototype.addText = function ( text, prefix, suffix ){ + if ( text ) { + this.addTextline(text, this.CSS_CLASSES.default, prefix, suffix); + } + }; + + CenteringTextElement.prototype.addSubText = function ( text ){ + if ( text ) { + this.addTextline(text, this.CSS_CLASSES.subtext, "(", ")"); + } + }; + + CenteringTextElement.prototype.addEquivalents = function ( text ){ + if ( text ) { + this.addTextline(text, this.CSS_CLASSES.default); + } + }; + + CenteringTextElement.prototype.addInstanceCount = function ( instanceCount ){ + if ( instanceCount ) { + this.addTextline(instanceCount.toString(), this.CSS_CLASSES.instanceCount); + } + }; + CenteringTextElement.prototype.saveCorrespondingSpan = function ( correspondingSpan ){ + this.storedSpanArrays.push(correspondingSpan); + }; + CenteringTextElement.prototype.saveFullTextLine = function ( fullText ){ + this.storedFullTextLines.push(fullText); + }; + CenteringTextElement.prototype.saveStyle = function ( style ){ + this.storedStyle.push(style); + }; + + CenteringTextElement.prototype.updateAllTextElements = function (){ + // TODO : TEST THIS postPrefix >>> _applyPreAndPostFix + for ( var i = 0; i < this.storedSpanArrays.length; i++ ) { + var truncatedText = textTools.truncate(this.storedFullTextLines[i], this._textBlock().datum().textWidth(), this.storedStyle[i]); + this.storedSpanArrays[i].text(truncatedText); + } + }; + + + CenteringTextElement.prototype.addTextline = function ( text, style, prefix, postfix ){ + var truncatedText = textTools.truncate(text, this._textBlock().datum().textWidth(), style); + this.saveFullTextLine(text); + this.saveStyle(style); + var tspan = this._textBlock().append("tspan") + .classed(this.CSS_CLASSES.default, true) + .classed(style, true) + .text(this._applyPreAndPostFix(truncatedText, prefix, postfix)) + .attr("x", 0); + this._repositionTextLine(tspan); + this.saveCorrespondingSpan(tspan); + + this._repositionTextBlock(); + }; + + CenteringTextElement.prototype._repositionTextLine = function ( tspan ){ + var fontSizeProperty = window.getComputedStyle(tspan.node()).getPropertyValue("font-size"); + var fontSize = parseFloat(fontSizeProperty); + + var siblingCount = this._lineCount() - 1; + var lineDistance = siblingCount > 0 ? this.LINE_DISTANCE : 0; + + tspan.attr("dy", fontSize + lineDistance + "px"); + }; + + CenteringTextElement.prototype.getTextBox = function (){ + return this._textBlock(); + }; + + + CenteringTextElement.prototype._repositionTextBlock = function (){ + // Nothing to do if no child elements exist + var lineCount = this._lineCount(); + if ( lineCount < 1 ) { + this._textBlock().attr("y", 0); + return; + } + + var textBlockHeight = this._textBlock().node().getBBox().height; + this._textBlock().attr("y", -textBlockHeight * 0.5 + "px"); + }; + + CenteringTextElement.prototype._lineCount = function (){ + return this._textBlock().property("childElementCount"); + }; + + +/***/ }), +/* 15 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {var ADDITIONAL_TEXT_SPACE = 4; + + var tools = {}; + + function measureTextWidth( text, textStyle ){ + // Set a default value + if ( !textStyle ) { + textStyle = "text"; + } + var d = d3.select("body") + .append("div") + .attr("class", textStyle) + .attr("id", "width-test") // tag this element to identify it + .attr("style", "position:absolute; float:left; white-space:nowrap; visibility:hidden;") + .text(text), + w = document.getElementById("width-test").offsetWidth; + d.remove(); + return w; + } + + tools.truncate = function ( text, maxWidth, textStyle, additionalTextSpace ){ + maxWidth -= isNaN(additionalTextSpace) ? ADDITIONAL_TEXT_SPACE : additionalTextSpace; + if ( isNaN(maxWidth) || maxWidth <= 0 ) { + return text; + } + + var truncatedText = text, + newTruncatedTextLength, + textWidth, + ratio; + + while ( true ) { + textWidth = measureTextWidth(truncatedText, textStyle); + if ( textWidth <= maxWidth ) { + break; + } + + ratio = textWidth / maxWidth; + newTruncatedTextLength = Math.floor(truncatedText.length / ratio); + + // detect if nothing changes + if ( truncatedText.length === newTruncatedTextLength ) { + break; + } + + truncatedText = truncatedText.substring(0, newTruncatedTextLength); + } + + if ( text.length > truncatedText.length ) { + return text.substring(0, truncatedText.length - 3) + "..."; + } + return text; + }; + + + module.exports = function (){ + return tools; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), +/* 16 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {module.exports = AbstractTextElement; + + function AbstractTextElement( container, backgroundColor ){ + var textBlock = container.append("text") + .classed("text", true) + .style("fill", this._getTextColor(backgroundColor)) + .attr("text-anchor", "middle"); + + this._textBlock = function (){ + return textBlock; + }; + } + + AbstractTextElement.prototype.LINE_DISTANCE = 1; + AbstractTextElement.prototype.CSS_CLASSES = { + default: "text", + subtext: "subtext", + instanceCount: "instance-count" + }; + AbstractTextElement.prototype.DARK_TEXT_COLOR = "#000"; + AbstractTextElement.prototype.LIGHT_TEXT_COLOR = "#fff"; + + AbstractTextElement.prototype.translation = function ( x, y ){ + this._textBlock().attr("transform", "translate(" + x + ", " + y + ")"); + return this; + }; + + AbstractTextElement.prototype.remove = function (){ + this._textBlock().remove(); + return this; + }; + + AbstractTextElement.prototype._applyPreAndPostFix = function ( text, prefix, postfix ){ + if ( prefix ) { + text = prefix + text; + } + if ( postfix ) { + text += postfix; + } + return text; + }; + + AbstractTextElement.prototype._getTextColor = function ( rawBackgroundColor ){ + if ( !rawBackgroundColor ) { + return AbstractTextElement.prototype.DARK_TEXT_COLOR; + } + + var backgroundColor = d3.rgb(rawBackgroundColor); + if ( calculateLuminance(backgroundColor) > 0.5 ) { + return AbstractTextElement.prototype.DARK_TEXT_COLOR; + } else { + return AbstractTextElement.prototype.LIGHT_TEXT_COLOR; + } + }; + + function calculateLuminance( color ){ + return 0.3 * (color.r / 255) + 0.59 * (color.g / 255) + 0.11 * (color.b / 255); + } + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), +/* 17 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {/** + * Contains reusable function for drawing nodes. + */ + module.exports = (function (){ + + var tools = {}; + + /** + * Append a circular class node with the passed attributes. + * @param parent the parent element to which the circle will be appended + * @param radius + * @param [cssClasses] an array of additional css classes + * @param [tooltip] + * @param [backgroundColor] + * @returns {*} + */ + tools.appendCircularClass = function ( parent, radius, cssClasses, tooltip, backgroundColor ){ + var circle = parent.append("circle") + .classed("class", true) + .attr("r", radius); + + addCssClasses(circle, cssClasses); + addToolTip(circle, tooltip); + addBackgroundColor(circle, backgroundColor); + + return circle; + }; + + function addCssClasses( element, cssClasses ){ + if ( cssClasses instanceof Array ) { + cssClasses.forEach(function ( cssClass ){ + element.classed(cssClass, true); + }); + } + } + + function addToolTip( element, tooltip ){ + if ( tooltip ) { + element.append("title").text(tooltip); + } + } + + function addBackgroundColor( element, backgroundColor ){ + if ( backgroundColor ) { + element.style("fill", backgroundColor); + } + } + + /** + * Appends a rectangular class node with the passed attributes. + * @param parent the parent element to which the rectangle will be appended + * @param width + * @param height + * @param [cssClasses] an array of additional css classes + * @param [tooltip] + * @param [backgroundColor] + * @returns {*} + */ + tools.appendRectangularClass = function ( parent, width, height, cssClasses, tooltip, backgroundColor ){ + var rectangle = parent.append("rect") + .classed("class", true) + .attr("x", -width / 2) + .attr("y", -height / 2) + .attr("width", width) + .attr("height", height); + + addCssClasses(rectangle, cssClasses); + addToolTip(rectangle, tooltip); + addBackgroundColor(rectangle, backgroundColor); + + return rectangle; + }; + + tools.drawPin = function ( container, dx, dy, onClick, accuraciesHelperFunction, useAccuracyHelper ){ + var pinGroupElement = container + .append("g") + .classed("hidden-in-export", true) + .attr("transform", "translate(" + dx + "," + dy + ")"); + + var base = pinGroupElement.append("circle") + .classed("class pin feature", true) + .attr("r", 12) + .on("click", function (){ + if ( onClick ) { + onClick(); + } + d3.event.stopPropagation(); + }); + + pinGroupElement.append("line") + .attr("x1", 0) + .attr("x2", 0) + .attr("y1", 12) + .attr("y2", 16); + + if ( useAccuracyHelper === true ) { + pinGroupElement.append("circle") + .attr("r", 15) + .attr("cx", -7) + .attr("cy", -7) + .classed("superHiddenElement ", true) + .classed("superOpacityElement", !accuraciesHelperFunction()) + .on("click", function (){ + if ( onClick ) { + onClick(); + } + d3.event.stopPropagation(); + }) + .on("mouseover", function (){ + base.classed("feature_hover", true); + }) + .on("mouseout", function (){ + base.classed("feature_hover", false); + }) + ; + + } + + + return pinGroupElement; + }; + + tools.drawRectHalo = function ( node, width, height, offset ){ + var container; + if ( node.nodeElement ) + container = node.nodeElement(); + else + container = node.labelElement(); + + if ( !container ) { + // console.log("no container found"); + return; + } + + var haloGroupElement = container + .append("g") + .classed("hidden-in-export", true); + + haloGroupElement.append("rect") + .classed("searchResultA", true) + .attr("x", (-width - offset) / 2) + .attr("y", (-offset - height) / 2) + .attr("width", width + offset) + .attr("height", height + offset); + haloGroupElement.attr("animationRunning", true); + + haloGroupElement.node().addEventListener("webkitAnimationEnd", function (){ + var test = haloGroupElement.selectAll(".searchResultA"); + test.classed("searchResultA", false) + .classed("searchResultB", true); + haloGroupElement.attr("animationRunning", false); + }); + haloGroupElement.node().addEventListener("animationend", function (){ + var test = haloGroupElement.selectAll(".searchResultA"); + test.classed("searchResultA", false) + .classed("searchResultB", true); + haloGroupElement.attr("animationRunning", false); + }); + + + return haloGroupElement; + + }; + tools.drawHalo = function ( container, radius ){ + if ( container === undefined ) { + return null; + // there is no element to add the halo to; + // this means the node was not rendered previously + } + + var haloGroupElement = container + .append("g") + .classed("hidden-in-export", true); + + + haloGroupElement.append("circle", ":first-child") + .classed("searchResultA", true) + .attr("r", radius + 15); + haloGroupElement.attr("animationRunning", true); + + + haloGroupElement.node().addEventListener("webkitAnimationEnd", function (){ + var test = haloGroupElement.selectAll(".searchResultA"); + test.classed("searchResultA", false) + .classed("searchResultB", true) + .attr("animationRunning", false); + haloGroupElement.attr("animationRunning", false); + }); + haloGroupElement.node().addEventListener("animationend", function (){ + var test = haloGroupElement.selectAll(".searchResultA"); + test.classed("searchResultA", false) + .classed("searchResultB", true) + .attr("animationRunning", false); + haloGroupElement.attr("animationRunning", false); + }); + + return haloGroupElement; + }; + + return function (){ + // Encapsulate into function to maintain default.module.path() + return tools; + }; + })(); + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), +/* 18 */ +/***/ (function(module, exports, __webpack_require__) { + + var RoundNode = __webpack_require__(8); + + module.exports = (function (){ + + var o = function ( graph ){ + RoundNode.apply(this, arguments); + + this.type("owl:Class"); + }; + o.prototype = Object.create(RoundNode.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 19 */ +/***/ (function(module, exports, __webpack_require__) { + + var SetOperatorNode = __webpack_require__(20); + + module.exports = (function (){ + + var o = function ( graph ){ + SetOperatorNode.apply(this, arguments); + + var that = this, + superDrawFunction = that.draw; + + this.styleClass("complementof") + .type("owl:complementOf"); + + this.draw = function ( element ){ + superDrawFunction(element); + + var symbol = element.append("g").classed("embedded", true); + + symbol.append("circle") + .attr("class", "symbol") + .classed("fineline", true) + .attr("r", 10); + symbol.append("path") + .attr("class", "nofill") + .attr("d", "m -7,-1.5 12,0 0,6") + .attr("transform", "scale(.5)"); + + symbol.attr("transform", + "translate(-" + (that.radius() - 15) / 100 + ",-" + (that.radius() - 15) / 100 + ")"); + + that.postDrawActions(); + }; + }; + o.prototype = Object.create(SetOperatorNode.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 20 */ +/***/ (function(module, exports, __webpack_require__) { + + var AbsoluteTextElement = __webpack_require__(21); + var BoxArrowLink = __webpack_require__(22); + var RoundNode = __webpack_require__(8); + var drawTools = __webpack_require__(17)(); + + module.exports = (function (){ + + var o = function ( graph ){ + RoundNode.apply(this, arguments); + + var that = this, + superHoverHighlightingFunction = that.setHoverHighlighting, + superPostDrawActions = that.postDrawActions; + + this.setHoverHighlighting = function ( enable ){ + superHoverHighlightingFunction(enable); + + // Highlight links pointing to included nodes when hovering the set operator + that.links() + .filter(function ( link ){ + return link instanceof BoxArrowLink; + }) + .filter(function ( link ){ + return link.domain().equals(that); + }) + .forEach(function ( link ){ + link.property().setHighlighting(enable); + }); + }; + + this.draw = function ( element ){ + that.nodeElement(element); + + drawTools.appendCircularClass(element, that.actualRadius(), + that.collectCssClasses().join(" "), + that.labelForCurrentLanguage(), that.backgroundColor()); + }; + + this.postDrawActions = function (){ + superPostDrawActions(); + that.textBlock().remove(); + + var textElement = new AbsoluteTextElement(that.nodeElement(), that.backgroundColor()); + + var equivalentsString = that.equivalentsString(); + var offsetForFollowingEquivalents = equivalentsString ? -30 : -17; + var suffixForFollowingEquivalents = equivalentsString ? "," : ""; + textElement.addText(that.labelForCurrentLanguage(), offsetForFollowingEquivalents, "", + suffixForFollowingEquivalents); + + textElement.addEquivalents(equivalentsString, -17); + + + if ( !graph.options().compactNotation() ) { + + if ( that.indicationString().length > 0 ) { + textElement.addSubText(that.indicationString(), 17); + textElement.addInstanceCount(that.individuals().length, 30); + } else { + textElement.addInstanceCount(that.individuals().length, 17); + } + } else { + textElement.addInstanceCount(that.individuals().length, 17); + } + + that.textBlock(textElement); + }; + }; + o.prototype = Object.create(RoundNode.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 21 */ +/***/ (function(module, exports, __webpack_require__) { + + var textTools = __webpack_require__(15)(); + var AbstractTextElement = __webpack_require__(16); + + module.exports = AbsoluteTextElement; + function AbsoluteTextElement( container, backgroundColor ){ + AbstractTextElement.apply(this, arguments); + } + + AbsoluteTextElement.prototype = Object.create(AbstractTextElement.prototype); + AbsoluteTextElement.prototype.constructor = AbsoluteTextElement; + + AbsoluteTextElement.prototype.addText = function ( text, yShift, prefix, suffix ){ + if ( text ) { + this.addTextline(text, this.CSS_CLASSES.default, yShift, prefix, suffix); + } + }; + + AbsoluteTextElement.prototype.addSubText = function ( text, yShift ){ + if ( text ) { + this.addTextline(text, this.CSS_CLASSES.subtext, yShift, "(", ")"); + } + }; + + AbsoluteTextElement.prototype.addEquivalents = function ( text, yShift ){ + if ( text ) { + this.addTextline(text, this.CSS_CLASSES.default, yShift); + } + }; + + AbsoluteTextElement.prototype.addInstanceCount = function ( instanceCount, yShift ){ + if ( instanceCount ) { + this.addTextline(instanceCount.toString(), this.CSS_CLASSES.instanceCount, yShift); + } + }; + + + AbsoluteTextElement.prototype.addTextline = function ( text, style, yShift, prefix, postfix ){ + var truncatedText = textTools.truncate(text, this._textBlock().datum().textWidth(yShift), style); + + var tspan = this._textBlock().append("tspan") + .classed(this.CSS_CLASSES.default, true) + .classed(style, true) + .text(this._applyPreAndPostFix(truncatedText, prefix, postfix)) + .attr("x", 0); + this._repositionTextLine(tspan, yShift); + }; + + AbsoluteTextElement.prototype._repositionTextLine = function ( tspan, yShift ){ + var fontSizeProperty = window.getComputedStyle(tspan.node()).getPropertyValue("font-size"); + var fontSize = parseFloat(fontSizeProperty); + + /* BBox height is not supported in Firefox for tspans and dominant-baseline doesn't work in some SVG editors */ + var approximatedShiftForVerticalCentering = (1 / 3) * fontSize; + + tspan.attr("y", approximatedShiftForVerticalCentering + (yShift || 0) + "px"); + }; + + +/***/ }), +/* 22 */ +/***/ (function(module, exports, __webpack_require__) { + + var PlainLink = __webpack_require__(23); + + + module.exports = BoxArrowLink; + + function BoxArrowLink( domain, range, property ){ + PlainLink.apply(this, arguments); + } + + BoxArrowLink.prototype = Object.create(PlainLink.prototype); + BoxArrowLink.prototype.constructor = BoxArrowLink; + + + BoxArrowLink.prototype.draw = function ( linkGroup, markerContainer ){ + var property = this.label().property(); + var inverse = this.label().inverse(); + + createPropertyMarker(markerContainer, property); + if ( inverse ) { + createInverseMarker(markerContainer, inverse); + } + + PlainLink.prototype.draw.apply(this, arguments); + + // attach the markers to the link + linkGroup.attr("marker-start", "url(#" + property.markerId() + ")"); + if ( inverse ) { + linkGroup.attr("marker-end", "url(#" + inverse.markerId() + ")"); + } + }; + + + function createPropertyMarker( markerContainer, inverse ){ + var inverseMarker = appendBasicMarker(markerContainer, inverse); + inverseMarker.attr("refX", -8); + inverseMarker.append("path") + .attr("d", "M0,-8L8,0L0,8L-8,0L0,-8L8,0") + .classed(inverse.markerType(), true); + + inverse.markerElement(inverseMarker); + } + + function createInverseMarker( markerContainer, property ){ + var marker = appendBasicMarker(markerContainer, property); + marker.attr("refX", 8); + marker.append("path") + .attr("d", "M0,-8L8,0L0,8L-8,0L0,-8L8,0") + .classed(property.markerType(), true); + + property.markerElement(marker); + } + + function appendBasicMarker( markerContainer, property ){ + return markerContainer.append("marker") + .datum(property) + .attr("id", property.markerId()) + .attr("viewBox", "-10 -10 20 20") + .attr("markerWidth", 20) + .attr("markerHeight", 20) + .attr("markerUnits", "userSpaceOnUse") + .attr("orient", "auto"); + } + + +/***/ }), +/* 23 */ +/***/ (function(module, exports, __webpack_require__) { + + var Label = __webpack_require__(24); + + + module.exports = PlainLink; + + /** + * A link connects at least two VOWL nodes. + * The properties connecting the VOWL nodes are stored separately into the label. + * @param domain + * @param range + * @param property + */ + function PlainLink( domain, range, property ){ + var layers, + layerIndex, + loops, + loopIndex, + pathEl, + label = new Label(property, this); + + var backPart = __webpack_require__(25)(domain, label, this), + frontPart = __webpack_require__(25)(label, range, this); + + + this.layers = function ( p ){ + if ( !arguments.length ) return layers; + layers = p; + return this; + }; + + this.layerIndex = function ( p ){ + if ( !arguments.length ) return layerIndex; + layerIndex = p; + return this; + }; + + this.loops = function ( p ){ + if ( !arguments.length ) return loops; + loops = p; + return this; + }; + + this.loopIndex = function ( p ){ + if ( !arguments.length ) return loopIndex; + loopIndex = p; + return this; + }; + + + this.domain = function (){ + return domain; + }; + + this.label = function (){ + return label; + }; + + this.linkParts = function (){ + return [frontPart, backPart]; + }; + + this.range = function (){ + return range; + }; + this.pathObj = function ( pE ){ + if ( !arguments.length ) { + return pathEl; + } + pathEl = pE; + }; + } + + + PlainLink.prototype.draw = function ( linkGroup ){ + var property = this.label().property(); + var inverse = this.label().inverse(); + + property.linkGroup(linkGroup); + if ( inverse ) { + inverse.linkGroup(linkGroup); + } + + var pathElement = linkGroup.append("path"); + pathElement.classed("link-path", true) + .classed(this.domain().cssClassOfNode(), true) + .classed(this.range().cssClassOfNode(), true) + .classed(property.linkType(), true); + this.pathObj(pathElement); + + }; + + + PlainLink.prototype.inverse = function (){ + return this.label().inverse(); + }; + + PlainLink.prototype.isLoop = function (){ + return this.domain().equals(this.range()); + }; + + PlainLink.prototype.property = function (){ + return this.label().property(); + }; + + + +/***/ }), +/* 24 */ +/***/ (function(module, exports) { + + module.exports = Label; + + /** + * A label represents the element(s) which further describe a link. + * It encapsulates the property and its inverse property. + * @param property the property; the inverse is inferred + * @param link the link this label belongs to + */ + function Label( property, link ){ + this.link = function (){ + return link; + }; + + this.property = function (){ + return property; + }; + + // "Forward" the fixed value set on the property to avoid having to access this container + Object.defineProperty(this, "fixed", { + get: function (){ + var inverseFixed = property.inverse() ? property.inverse().fixed : false; + return property.fixed || inverseFixed; + }, + set: function ( v ){ + property.fixed = v; + if ( property.inverse() ) property.inverse().fixed = v; + } + }); + this.frozen = property.frozen; + this.locked = property.locked; + this.pinned = property.pinned; + } + + Label.prototype.actualRadius = function (){ + return this.property().actualRadius(); + }; + + Label.prototype.draw = function ( container ){ + return this.property().draw(container); + }; + + Label.prototype.inverse = function (){ + return this.property().inverse(); + }; + + Label.prototype.equals = function ( other ){ + if ( !other ) { + return false; + } + + var instance = other instanceof Label; + var equalProperty = this.property().equals(other.property()); + + var equalInverse = false; + if ( this.inverse() ) { + equalInverse = this.inverse().equals(other.inverse()); + } else if ( !other.inverse() ) { + equalInverse = true; + } + + return instance && equalProperty && equalInverse; + }; + + +/***/ }), +/* 25 */ +/***/ (function(module, exports) { + + /** + * A linkPart connects two force layout nodes. + * It reprents a link which can be used in d3's force layout. + * @param _domain + * @param _range + * @param _link + */ + module.exports = function ( _domain, _range, _link ){ + var linkPart = {}, + domain = _domain, + link = _link, + range = _range; + + // Define d3 properties + Object.defineProperties(linkPart, { + "source": { value: domain, writable: true }, + "target": { value: range, writable: true } + }); + + + linkPart.domain = function (){ + return domain; + }; + + linkPart.link = function (){ + return link; + }; + + linkPart.range = function (){ + return range; + }; + + + return linkPart; + }; + + +/***/ }), +/* 26 */ +/***/ (function(module, exports, __webpack_require__) { + + var RoundNode = __webpack_require__(8); + + module.exports = (function (){ + + var o = function ( graph ){ + RoundNode.apply(this, arguments); + + this.attributes(["deprecated"]) + .type("owl:DeprecatedClass") + .styleClass("deprecated") + .indications(["deprecated"]); + }; + o.prototype = Object.create(RoundNode.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 27 */ +/***/ (function(module, exports, __webpack_require__) { + + var SetOperatorNode = __webpack_require__(20); + + module.exports = (function (){ + + var o = function ( graph ){ + SetOperatorNode.apply(this, arguments); + + var that = this, + superDrawFunction = that.draw; + + this.styleClass("disjointunionof") + .type("owl:disjointUnionOf"); + + this.draw = function ( element ){ + superDrawFunction(element); + + var symbol = element.append("g").classed("embedded", true); + + var symbolRadius = 10; + symbol.append("circle") + .attr("class", "symbol") + .attr("r", symbolRadius); + symbol.append("circle") + .attr("cx", 10) + .attr("class", "symbol") + .classed("fineline", true) + .attr("r", symbolRadius); + symbol.append("circle") + .attr("class", "nofill") + .classed("fineline", true) + .attr("r", symbolRadius); + symbol.append("text") + .attr("class", "link") + .text("1") + .attr("transform", "scale(.7)translate(3,5)"); + + symbol.attr("transform", "translate(-" + (that.radius() - 15) / 7 + ",-" + (that.radius() - 15) / 100 + ")"); + + that.postDrawActions(); + }; + }; + o.prototype = Object.create(SetOperatorNode.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 28 */ +/***/ (function(module, exports, __webpack_require__) { + + var RoundNode = __webpack_require__(8); + var drawTools = __webpack_require__(17)(); + + module.exports = (function (){ + + var o = function ( graph ){ + RoundNode.apply(this, arguments); + + var CIRCLE_SIZE_DIFFERENCE = 4; + var renderingElement; + var that = this, + superActualRadiusFunction = that.actualRadius; + + this.styleClass("equivalentclass") + .type("owl:equivalentClass"); + + this.actualRadius = function (){ + return superActualRadiusFunction() + CIRCLE_SIZE_DIFFERENCE; + }; + + this.redrawElement = function (){ + renderingElement.remove(); + that.textBlock().remove(); + var bgColor = that.backgroundColor(); + + if ( that.attributes().indexOf("deprecated") > -1 ) { + bgColor = undefined; + } + var cssClasses = that.collectCssClasses(); + renderingElement = that.nodeElement().append("g"); + + if ( that.getRectangularRepresentation() === true ) { + drawTools.appendRectangularClass(renderingElement, 84, 84, ["white", "embedded"]); + drawTools.appendRectangularClass(renderingElement, 80 - CIRCLE_SIZE_DIFFERENCE, 80 - CIRCLE_SIZE_DIFFERENCE, cssClasses, that.labelForCurrentLanguage(), bgColor); + } else { + drawTools.appendCircularClass(renderingElement, that.actualRadius(), ["white", "embedded"]); + console.log(cssClasses); + console.log(that.attributes()); + console.log("what is bgColor" + bgColor); + drawTools.appendCircularClass(renderingElement, that.actualRadius() - CIRCLE_SIZE_DIFFERENCE, cssClasses, that.labelForCurrentLanguage(), bgColor); + + } + that.postDrawActions(that.nodeElement()); + + }; + this.draw = function ( parentElement ){ + var cssClasses = that.collectCssClasses(); + + that.nodeElement(parentElement); + renderingElement = parentElement.append("g"); + var bgColor = that.backgroundColor(); + if ( that.attributes().indexOf("deprecated") > -1 ) { + bgColor = undefined; + } + // draw the outer circle at first and afterwards the inner circle + if ( that.getRectangularRepresentation() === true ) { + drawTools.appendRectangularClass(renderingElement, 84, 84, ["white", "embedded"]); + drawTools.appendRectangularClass(renderingElement, 80 - CIRCLE_SIZE_DIFFERENCE, 80 - CIRCLE_SIZE_DIFFERENCE, cssClasses, that.labelForCurrentLanguage(), bgColor); + } else { + drawTools.appendCircularClass(renderingElement, that.actualRadius(), ["white", "embedded"]); + drawTools.appendCircularClass(renderingElement, that.actualRadius() - CIRCLE_SIZE_DIFFERENCE, cssClasses, that.labelForCurrentLanguage(), bgColor); + + } + + that.postDrawActions(); + }; + + /** + * Sets the hover highlighting of this node. + * @param enable + */ + that.setHoverHighlighting = function ( enable ){ + that.nodeElement().selectAll("circle:last-of-type").classed("hovered", enable); + }; + }; + o.prototype = Object.create(RoundNode.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 29 */ +/***/ (function(module, exports, __webpack_require__) { + + var SetOperatorNode = __webpack_require__(20); + + module.exports = (function (){ + + var o = function ( graph ){ + SetOperatorNode.apply(this, arguments); + + var that = this, + superDrawFunction = that.draw, + INTERSECTION_BACKGROUND_PATH = createIntersectionPath(); + + this.styleClass("intersectionof") + .type("owl:intersectionOf"); + + this.draw = function ( element ){ + superDrawFunction(element); + + var symbol = element.append("g").classed("embedded", true); + + var symbolRadius = 10; + symbol.append("path") + .attr("class", "nostroke") + .classed("symbol", true) + .attr("d", INTERSECTION_BACKGROUND_PATH); + symbol.append("circle") + .attr("class", "nofill") + .classed("fineline", true) + .attr("r", symbolRadius); + symbol.append("circle") + .attr("cx", 10) + .attr("class", "nofill") + .classed("fineline", true) + .attr("r", symbolRadius); + symbol.append("path") + .attr("class", "nofill") + .attr("d", "m 9,5 c 0,-2 0,-4 0,-6 0,0 0,0 0,0 0,0 0,-1.8 -1,-2.3 -0.7,-0.6 -1.7,-0.8 -2.9," + + "-0.8 -1.2,0 -2,0 -3,0.8 -0.7,0.5 -1,1.4 -1,2.3 0,2 0,4 0,6") + .attr("transform", "scale(.5)translate(5,0)"); + + symbol.attr("transform", + "translate(-" + (that.radius() - 15) / 7 + ",-" + (that.radius() - 15) / 100 + ")"); + + that.postDrawActions(); + }; + + function createIntersectionPath(){ + var height = 18; + + var offsetX = 5; + var offsetY = -(height / 2); + + var bezierX = 7; + var bezierY = 5; + var bottomBezierY = height - bezierY; + + var startPosition = "M" + offsetX + "," + offsetY; + var rightSide = "c" + bezierX + "," + bezierY + " " + bezierX + "," + bottomBezierY + " 0," + height; + var leftSide = "c" + -bezierX + "," + -bezierY + " " + -bezierX + "," + -bottomBezierY + " 0," + -height; + + return startPosition + rightSide + leftSide; + } + }; + o.prototype = Object.create(SetOperatorNode.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 30 */ +/***/ (function(module, exports, __webpack_require__) { + + var OwlThing = __webpack_require__(31); + + module.exports = (function (){ + + var o = function ( graph ){ + OwlThing.apply(this, arguments); + + this.label("Nothing") + .type("owl:Nothing") + .iri("http://www.w3.org/2002/07/owl#Nothing"); + }; + o.prototype = Object.create(OwlThing.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 31 */ +/***/ (function(module, exports, __webpack_require__) { + + var RoundNode = __webpack_require__(8); + + module.exports = (function (){ + + var o = function ( graph ){ + RoundNode.apply(this, arguments); + + var superDrawFunction = this.draw; + + this.label("Thing") + .type("owl:Thing") + .iri("http://www.w3.org/2002/07/owl#Thing") + .radius(30); + + this.draw = function ( element ){ + superDrawFunction(element, ["white", "dashed"]); + }; + }; + o.prototype = Object.create(RoundNode.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 32 */ +/***/ (function(module, exports, __webpack_require__) { + + var SetOperatorNode = __webpack_require__(20); + + module.exports = (function (){ + + var o = function ( graph ){ + SetOperatorNode.apply(this, arguments); + + var that = this, + superDrawFunction = that.draw; + + this.styleClass("unionof") + .type("owl:unionOf"); + + this.draw = function ( element ){ + superDrawFunction(element); + + var symbol = element.append("g").classed("embedded", true); + + var symbolRadius = 10; + symbol.append("circle") + .attr("class", "symbol") + .attr("r", symbolRadius); + symbol.append("circle") + .attr("cx", 10) + .attr("class", "symbol") + .classed("fineline", true) + .attr("r", symbolRadius); + symbol.append("circle") + .attr("class", "nofill") + .classed("fineline", true) + .attr("r", symbolRadius); + symbol.append("path") + .attr("class", "link") + .attr("d", "m 1,-3 c 0,2 0,4 0,6 0,0 0,0 0,0 0,2 2,3 4,3 2,0 4,-1 4,-3 0,-2 0,-4 0,-6") + .attr("transform", "scale(.5)translate(5,0)"); + + symbol.attr("transform", "translate(-" + (that.radius() - 15) / 7 + ",-" + (that.radius() - 15) / 100 + ")"); + + that.postDrawActions(); + }; + }; + o.prototype = Object.create(SetOperatorNode.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 33 */ +/***/ (function(module, exports, __webpack_require__) { + + var RoundNode = __webpack_require__(8); + + module.exports = (function (){ + + var o = function ( graph ){ + RoundNode.apply(this, arguments); + + this.attributes(["rdf"]) + .type("rdfs:Class"); + }; + o.prototype = Object.create(RoundNode.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 34 */ +/***/ (function(module, exports, __webpack_require__) { + + var DatatypeNode = __webpack_require__(35); + + module.exports = (function (){ + + var o = function ( graph ){ + DatatypeNode.apply(this, arguments); + var dTypeString = "undefined"; + this.attributes(["datatype"]) + .type("rdfs:Datatype") + .styleClass("datatype"); + this.dType = function ( val ){ + if ( !arguments.length ) return dTypeString; + dTypeString = val; + + }; + }; + o.prototype = Object.create(DatatypeNode.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 35 */ +/***/ (function(module, exports, __webpack_require__) { + + var RectangularNode = __webpack_require__(36); + + module.exports = (function (){ + + var o = function ( graph ){ + RectangularNode.apply(this, arguments); + }; + o.prototype = Object.create(RectangularNode.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 36 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {var BaseNode = __webpack_require__(9); + var CenteringTextElement = __webpack_require__(14); + var drawTools = __webpack_require__(17)(); + var rectangularElementTools = __webpack_require__(37)(); + + module.exports = (function (){ + + var o = function ( graph ){ + BaseNode.apply(this, arguments); + + var that = this, + height = 20, + width = 60, + pinGroupElement, + haloGroupElement, + labelWidth = 80, + myWidth = 80, + defaultWidth = 80, + shapeElement, + textBlock, + smallestRadius = height / 2; + + that.renderType("rect"); + // Properties + this.height = function ( p ){ + if ( !arguments.length ) return height; + height = p; + return this; + }; + + this.width = function ( p ){ + if ( !arguments.length ) return width; + width = p; + return this; + }; + + this.getHalos = function (){ + return haloGroupElement; + }; + + // Functions + // for compatibility reasons // TODO resolve + this.actualRadius = function (){ + return smallestRadius; + }; + + this.distanceToBorder = function ( dx, dy ){ + return rectangularElementTools.distanceToBorder(that, dx, dy); + }; + + this.setHoverHighlighting = function ( enable ){ + that.nodeElement().selectAll("rect").classed("hovered", enable); + + var haloGroup = that.getHalos(); + if ( haloGroup ) { + var test = haloGroup.selectAll(".searchResultA"); + test.classed("searchResultA", false); + test.classed("searchResultB", true); + } + + }; + + + // overwrite the labelWith; + + + this.textWidth = function (){ + return labelWidth; + }; + this.width = function (){ + return labelWidth; + }; + + this.getMyWidth = function (){ + // use a simple heuristic + var text = that.labelForCurrentLanguage(); + myWidth = measureTextWidth(text, "text") + 20; + + // check for sub names; + var indicatorText = that.indicationString(); + var indicatorWidth = measureTextWidth(indicatorText, "subtext") + 20; + if ( indicatorWidth > myWidth ) + myWidth = indicatorWidth; + + return myWidth; + }; + + this.textWidth = function (){ + return that.width(); + }; + function measureTextWidth( text, textStyle ){ + // Set a default value + if ( !textStyle ) { + textStyle = "text"; + } + var d = d3.select("body") + .append("div") + .attr("class", textStyle) + .attr("id", "width-test") // tag this element to identify it + .attr("style", "position:absolute; float:left; white-space:nowrap; visibility:hidden;") + .text(text), + w = document.getElementById("width-test").offsetWidth; + d.remove(); + return w; + } + + this.toggleFocus = function (){ + that.focused(!that.focused()); + that.nodeElement().select("rect").classed("focused", that.focused()); + graph.resetSearchHighlight(); + graph.options().searchMenu().clearText(); + }; + + /** + * Draws the rectangular node. + * @param parentElement the element to which this node will be appended + * @param [additionalCssClasses] additional css classes + */ + this.draw = function ( parentElement, additionalCssClasses ){ + var cssClasses = that.collectCssClasses(); + + that.nodeElement(parentElement); + + if ( additionalCssClasses instanceof Array ) { + cssClasses = cssClasses.concat(additionalCssClasses); + } + + // set the value for that.width() + // update labelWidth Value; + if ( graph.options().dynamicLabelWidth() === true ) labelWidth = Math.min(that.getMyWidth(), graph.options().maxLabelWidth()); + else labelWidth = defaultWidth; + + width = labelWidth; + shapeElement = drawTools.appendRectangularClass(parentElement, that.width(), that.height(), cssClasses, that.labelForCurrentLanguage(), that.backgroundColor()); + + textBlock = new CenteringTextElement(parentElement, that.backgroundColor()); + textBlock.addText(that.labelForCurrentLanguage()); + + that.addMouseListeners(); + + if ( that.pinned() ) { + that.drawPin(); + } + if ( that.halo() ) { + that.drawHalo(false); + } + }; + + this.drawPin = function (){ + that.pinned(true); + // if (graph.options().dynamicLabelWidth()===true) labelWidth=that.getMyWidth(); + // else labelWidth=defaultWidth; + // width=labelWidth; + // console.log("this element label Width is "+labelWidth); + var dx = -0.5 * labelWidth + 5, + dy = -1.1 * height; + + pinGroupElement = drawTools.drawPin(that.nodeElement(), dx, dy, this.removePin, graph.options().showDraggerObject, graph.options().useAccuracyHelper()); + + }; + + this.removePin = function (){ + that.pinned(false); + if ( pinGroupElement ) { + pinGroupElement.remove(); + } + graph.updateStyle(); + }; + + this.removeHalo = function (){ + that.halo(false); + if ( haloGroupElement ) { + haloGroupElement.remove(); + haloGroupElement = null; + } + }; + + this.drawHalo = function ( pulseAnimation ){ + that.halo(true); + + var offset = 0; + haloGroupElement = drawTools.drawRectHalo(that, this.width(), this.height(), offset); + + if ( pulseAnimation === false ) { + var pulseItem = haloGroupElement.selectAll(".searchResultA"); + pulseItem.classed("searchResultA", false); + pulseItem.classed("searchResultB", true); + pulseItem.attr("animationRunning", false); + } + + if ( that.pinned() ) { + var selectedNode = pinGroupElement.node(); + var nodeContainer = selectedNode.parentNode; + nodeContainer.appendChild(selectedNode); + } + + }; + + this.updateTextElement = function (){ + textBlock.updateAllTextElements(); + + }; + + this.textBlock = function (){ + return textBlock; + }; + + this.redrawLabelText = function (){ + textBlock.remove(); + textBlock = new CenteringTextElement(that.nodeElement(), that.backgroundColor()); + textBlock.addText(that.labelForCurrentLanguage()); + that.animateDynamicLabelWidth(graph.options().dynamicLabelWidth()); + shapeElement.select("title").text(that.labelForCurrentLanguage()); + }; + + this.animateDynamicLabelWidth = function ( dynamic ){ + that.removeHalo(); + var height = that.height(); + if ( dynamic === true ) { + labelWidth = Math.min(that.getMyWidth(), graph.options().maxLabelWidth()); + shapeElement.transition().tween("attr", function (){ + }) + .ease('linear') + .duration(100) + .attr({ x: -labelWidth / 2, y: -height / 2, width: labelWidth, height: height }) + .each("end", function (){ + that.updateTextElement(); + }); + + } else { + labelWidth = defaultWidth; + that.updateTextElement(); + shapeElement.transition().tween("attr", function (){ + }) + .ease('linear') + .duration(100) + .attr({ x: -labelWidth / 2, y: -height / 2, width: labelWidth, height: height }); + + } + + // for the pin we dont need to differ between different widths -- they are already set + if ( that.pinned() === true && pinGroupElement ) { + + var dx = 0.5 * labelWidth - 10, + dy = -1.1 * height; + + pinGroupElement.transition() + .tween("attr.translate", function (){ + }) + .attr("transform", "translate(" + dx + "," + dy + ")") + .ease('linear') + .duration(100); + } + }; + + this.addTextLabelElement = function (){ + var parentElement = that.nodeElement(); + textBlock = new CenteringTextElement(parentElement, this.backgroundColor()); + textBlock.addText(that.labelForCurrentLanguage()); + }; + + + }; + o.prototype = Object.create(BaseNode.prototype); + o.prototype.constructor = o; + + return o; + }()); + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), +/* 37 */ +/***/ (function(module, exports) { + + var tools = {}; + module.exports = function (){ + return tools; + }; + + tools.distanceToBorder = function ( rect, dx, dy ){ + var width = rect.width(), + height = rect.height(); + + var innerDistance, + m_link = Math.abs(dy / dx), + m_rect = height / width; + + if ( m_link <= m_rect ) { + var timesX = dx / (width / 2), + rectY = dy / timesX; + innerDistance = Math.sqrt(Math.pow(width / 2, 2) + Math.pow(rectY, 2)); + } else { + var timesY = dy / (height / 2), + rectX = dx / timesY; + innerDistance = Math.sqrt(Math.pow(height / 2, 2) + Math.pow(rectX, 2)); + } + + return innerDistance; + }; + + +/***/ }), +/* 38 */ +/***/ (function(module, exports, __webpack_require__) { + + var DatatypeNode = __webpack_require__(35); + + module.exports = (function (){ + + var o = function ( graph ){ + DatatypeNode.apply(this, arguments); + + var superDrawFunction = this.draw, + superLabelFunction = this.label; + + this.attributes(["datatype"]) + .label("Literal") + .styleClass("literal") + .type("rdfs:Literal") + .iri("http://www.w3.org/2000/01/rdf-schema#Literal"); + + this.draw = function ( element ){ + superDrawFunction(element, ["dashed"]); + }; + + this.label = function ( p ){ + if ( !arguments.length ) return superLabelFunction(); + return this; + }; + }; + o.prototype = Object.create(DatatypeNode.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 39 */ +/***/ (function(module, exports, __webpack_require__) { + + var RoundNode = __webpack_require__(8); + + module.exports = (function (){ + + var o = function ( graph ){ + RoundNode.apply(this, arguments); + + var superDrawFunction = this.draw; + + this.attributes(["rdf"]) + .label("Resource") + .radius(30) + .styleClass("rdfsresource") + .type("rdfs:Resource"); + + this.draw = function ( element ){ + superDrawFunction(element, ["rdf", "dashed"]); + }; + }; + o.prototype = Object.create(RoundNode.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 40 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {var properties = []; + properties.push(__webpack_require__(41)); + properties.push(__webpack_require__(44)); + properties.push(__webpack_require__(45)); + properties.push(__webpack_require__(46)); + properties.push(__webpack_require__(47)); + properties.push(__webpack_require__(48)); + properties.push(__webpack_require__(49)); + properties.push(__webpack_require__(50)); + properties.push(__webpack_require__(51)); + properties.push(__webpack_require__(52)); + properties.push(__webpack_require__(53)); + properties.push(__webpack_require__(54)); + properties.push(__webpack_require__(55)); + properties.push(__webpack_require__(56)); + + var map = d3.map(properties, function ( Prototype ){ + return new Prototype().type(); + }); + + module.exports = function (){ + return map; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), +/* 41 */ +/***/ (function(module, exports, __webpack_require__) { + + var BaseProperty = __webpack_require__(42); + + module.exports = (function (){ + + var o = function ( graph ){ + BaseProperty.apply(this, arguments); + + var superGenerateCardinalityText = this.generateCardinalityText; + + this.linkType("values-from") + .markerType("filled values-from") + .styleClass("allvaluesfromproperty") + .type("owl:allValuesFrom"); + + this.generateCardinalityText = function (){ + var cardinalityText = "A"; + + var superCardinalityText = superGenerateCardinalityText(); + if ( superCardinalityText ) { + cardinalityText += ", " + superCardinalityText; + } + + return cardinalityText; + }; + }; + o.prototype = Object.create(BaseProperty.prototype); + o.prototype.constructor = o; + + return o; + }()); + + + + +/***/ }), +/* 42 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {var BaseElement = __webpack_require__(10); + var CenteringTextElement = __webpack_require__(14); + var drawTools = __webpack_require__(17)(); + var forceLayoutNodeFunctions = __webpack_require__(13)(); + var rectangularElementTools = __webpack_require__(37)(); + var math = __webpack_require__(43)(); + + module.exports = (function (){ + + // Static variables + var labelHeight = 28, + labelWidth = 80, + smallestRadius = labelHeight / 2; + + + // Constructor, private variables and privileged methods + var Base = function ( graph ){ + BaseElement.apply(this, arguments); + + var that = this, + // Basic attributes + cardinality, + domain, + inverse, + link, + minCardinality, + maxCardinality, + range, + subproperties, + superproperties, + // Style attributes + linkType = "normal", + markerType = "filled", + labelVisible = true, + // Element containers + cardinalityElement, + labelElement, + linkGroup, + markerElement, + // Other + ignoreLocalHoverEvents, + fobj, + pinGroupElement, + haloGroupElement, + myWidth = 80, + defaultWidth = 80, + shapeElement, + textElement, + parent_labelObject, + backupFullIri, + + redundantProperties = []; + + + this.existingPropertyIRI = function ( url ){ + return graph.options().editSidebar().checkForExistingURL(url); + }; + + this.getHalos = function (){ + return haloGroupElement; + }; + + this.getPin = function (){ + return pinGroupElement; + }; + this.labelObject = function ( lo, once ){ + if ( !arguments.length ) { + return parent_labelObject; + } + else { + parent_labelObject = lo; + if ( that.inverse() && once !== true ) { + that.inverse().labelObject(lo, true); + } + + } + }; + this.hide = function ( val ){ + that.labelElement().classed("hidden", val); + that.linkGroup().classed("hidden", val); + if ( that.cardinalityElement() ) + that.cardinalityElement().classed("hidden", val); + }; + + // Properties + this.cardinality = function ( p ){ + if ( !arguments.length ) return cardinality; + cardinality = p; + return this; + }; + + this.cardinalityElement = function ( p ){ + if ( !arguments.length ) return cardinalityElement; + cardinalityElement = p; + return this; + }; + + this.domain = function ( p ){ + if ( !arguments.length ) return domain; + domain = p; + return this; + }; + + this.inverse = function ( p ){ + if ( !arguments.length ) return inverse; + inverse = p; + return this; + }; + + this.labelElement = function ( p ){ + if ( !arguments.length ) return labelElement; + labelElement = p; + return this; + }; + + this.labelVisible = function ( p ){ + if ( !arguments.length ) return labelVisible; + labelVisible = p; + return this; + }; + + this.link = function ( p ){ + if ( !arguments.length ) return link; + link = p; + return this; + }; + + this.linkGroup = function ( p ){ + if ( !arguments.length ) return linkGroup; + linkGroup = p; + return this; + }; + + this.linkType = function ( p ){ + if ( !arguments.length ) return linkType; + linkType = p; + return this; + }; + + this.markerElement = function ( p ){ + if ( !arguments.length ) return markerElement; + markerElement = p; + return this; + }; + + this.markerType = function ( p ){ + if ( !arguments.length ) return markerType; + markerType = p; + return this; + }; + + this.maxCardinality = function ( p ){ + if ( !arguments.length ) return maxCardinality; + maxCardinality = p; + return this; + }; + + this.minCardinality = function ( p ){ + if ( !arguments.length ) return minCardinality; + minCardinality = p; + return this; + }; + + this.range = function ( p ){ + if ( !arguments.length ) return range; + range = p; + return this; + }; + + this.redundantProperties = function ( p ){ + if ( !arguments.length ) return redundantProperties; + redundantProperties = p; + return this; + }; + + this.subproperties = function ( p ){ + if ( !arguments.length ) return subproperties; + subproperties = p; + return this; + }; + + this.superproperties = function ( p ){ + if ( !arguments.length ) return superproperties; + superproperties = p; + return this; + }; + + + // Functions + this.distanceToBorder = function ( dx, dy ){ + return rectangularElementTools.distanceToBorder(that, dx, dy); + }; + + this.linkHasMarker = function (){ + return linkType !== "dashed"; + }; + + this.markerId = function (){ + return "marker" + that.id(); + }; + + this.toggleFocus = function (){ + that.focused(!that.focused()); + labelElement.select("rect").classed("focused", that.focused()); + graph.resetSearchHighlight(); + graph.options().searchMenu().clearText(); + }; + this.getShapeElement = function (){ + return shapeElement; + }; + + this.textBlock = function (){ + return textElement; + }; + + this.redrawElement = function (){ + shapeElement.remove(); + textElement.remove(); + + that.drawLabel(that.labelElement()); + that.animateDynamicLabelWidth(graph.options().dynamicLabelWidth()); + + + // shapeElement=this.addRect(that.labelElement()); + // + // var equivalentsString = that.equivalentsString(); + // var suffixForFollowingEquivalents = equivalentsString ? "," : ""; + // + // textElement = new CenteringTextElement(labelContainer, this.backgroundColor()); + // textElement.addText(this.labelForCurrentLanguage(), "", suffixForFollowingEquivalents); + // textElement.addEquivalents(equivalentsString); + // textElement.addSubText(this.indicationString()); + + }; + + // Reused functions TODO refactor + this.draw = function ( labelGroup ){ + function attachLabel( property ){ + var labelContainer = labelGroup.append("g") + .datum(property) + .classed("label", true) + .attr("id", property.id()); + + property.drawLabel(labelContainer); + return labelContainer; + } + + if ( !that.labelVisible() ) { + return undefined; + } + if ( graph.options().dynamicLabelWidth() === true ) myWidth = Math.min(that.getMyWidth(), graph.options().maxLabelWidth()); + else myWidth = defaultWidth; + + that.labelElement(attachLabel(that)); + // Draw an inverse label and reposition both labels if necessary + if ( that.inverse() ) { + var yTransformation = (that.height() / 2) + 1 /* additional space */; + that.inverse() + .labelElement(attachLabel(that.inverse())); + + that.labelElement() + .attr("transform", "translate(" + 0 + ",-" + yTransformation + ")"); + that.inverse() + .labelElement() + .attr("transform", "translate(" + 0 + "," + yTransformation + ")"); + } + + if ( that.pinned() ) { + that.drawPin(); + } else if ( that.inverse() && that.inverse().pinned() ) { + that.inverse().drawPin(); + } + + if ( that.halo() ) + that.drawHalo(false); + + return that.labelElement(); + }; + + this.addRect = function ( labelContainer ){ + var rect = labelContainer.append("rect") + .classed(that.styleClass(), true) + .classed("property", true) + .attr("x", -that.width() / 2) + .attr("y", -that.height() / 2) + .attr("width", that.width()) + .attr("height", that.height()) + .on("mouseover", function (){ + onMouseOver(); + }) + .on("mouseout", function (){ + onMouseOut(); + }); + + rect.append("title") + .text(that.labelForCurrentLanguage()); + + if ( that.visualAttributes() ) { + rect.classed(that.visualAttributes(), true); + } + + var bgColor = that.backgroundColor(); + + if ( that.attributes().indexOf("deprecated") > -1 ) { + bgColor = undefined; + rect.classed("deprecatedproperty", true); + } else { + rect.classed("deprecatedproperty", false); + } + rect.style("fill", bgColor); + + return rect; + }; + this.drawLabel = function ( labelContainer ){ + shapeElement = this.addRect(labelContainer); + + var equivalentsString = that.equivalentsString(); + var suffixForFollowingEquivalents = equivalentsString ? "," : ""; + + var bgColor = that.backgroundColor(); + if ( that.attributes().indexOf("deprecated") > -1 ) { + bgColor = undefined; + } + textElement = new CenteringTextElement(labelContainer, bgColor); + textElement.addText(this.labelForCurrentLanguage(), "", suffixForFollowingEquivalents); + textElement.addEquivalents(equivalentsString); + textElement.addSubText(this.indicationString()); + }; + + this.equivalentsString = function (){ + var equivalentProperties = that.equivalents(); + if ( !equivalentProperties ) { + return; + } + + return equivalentProperties + .map(function ( property ){ + if ( property === undefined || typeof(property) === "string" ) { // @WORKAROUND + return "ERROR"; + } + return property.labelForCurrentLanguage(); + }) + .join(", "); + }; + + this.drawCardinality = function ( container ){ + var cardinalityText = this.generateCardinalityText(); + + if ( cardinalityText ) { + that.cardinalityElement(container); + if ( cardinalityText.indexOf("A") === 0 && cardinalityText.length === 1 ) { + + // replacing text elements to svg elements; + container.classed("cardinality", true) + .attr("text-anchor", "middle") + .append("path") + .classed("cardinality", true) + .attr("d", "m -8.8832678,-11.303355 -7.97e-4,0 0.717374,1.833297 8.22987151,21.371761 8.66826659,-21.2123526 0.797082,-1.9927054 0.02471,0 -0.8218553,1.9927054 -2.2517565,5.4201577 -12.4444429,8e-6 -2.2019394,-5.5795821 z") + .style("fill", "none") + .attr("transform", "matrix(0.5,0,0,0.5,0.5,0.5)"); + return true; + } else if ( cardinalityText.indexOf("E") === 0 && cardinalityText.length === 1 ) { + container.classed("cardinality", true) + .attr("text-anchor", "middle") + .append("path") + .classed("cardinality", true) + .attr("d", "m -5.5788451,-8.0958763 10.8749368,0 0,8.34681523 -9.5707468,0.040132 9.5707468,-0.040132 0,8.42707237 -10.9150654,0") + .style("fill", "none") + .attr("transform", "matrix(0.5,0,0,0.5,0.5,0.5)"); + return true; + } + else { + container.append("text") + .classed("cardinality", true) + .attr("text-anchor", "middle") + .attr("dy", "0.5ex") + .text(cardinalityText); + return true; // drawing successful + } + } else { + return false; + } + }; + + this.generateCardinalityText = function (){ + if ( that.cardinality() ) { + return that.cardinality(); + } else if ( that.minCardinality() || that.maxCardinality() ) { + var minBoundary = that.minCardinality() || "*"; + var maxBoundary = that.maxCardinality() || "*"; + return minBoundary + ".." + maxBoundary; + } + }; + + that.setHighlighting = function ( enable ){ + if ( that.labelElement && that.labelElement() ) { + that.labelElement().select("rect").classed("hovered", enable); + } + that.linkGroup().selectAll("path, text").classed("hovered", enable); + if ( that.markerElement() ) { + that.markerElement().select("path").classed("hovered", enable); + if ( that.cardinalityElement() ) { + that.cardinalityElement().selectAll("path").classed("hovered-MathSymbol", enable); + that.cardinalityElement().classed("hovered", enable); + } + } + var subAndSuperProperties = getSubAndSuperProperties(); + subAndSuperProperties.forEach(function ( property ){ + + if ( property.labelElement && property.labelElement() ) { + property.labelElement().select("rect") + .classed("indirect-highlighting", enable); + } + + }); + var inversed = false; + + if ( graph.ignoreOtherHoverEvents() === false ) { + if ( that.inverse() ) { + inversed = true; + } + + if ( graph.isTouchDevice() === false ) { + graph.activateHoverElementsForProperties(enable, that, inversed); + } + else { + that.labelElement().select("rect").classed("hovered", false); + that.linkGroup().selectAll("path, text").classed("hovered", false); + if ( that.markerElement() ) { + that.markerElement().select("path").classed("hovered", false); + if ( that.cardinalityElement() ) { + that.cardinalityElement().classed("hovered", false); + } + } + graph.activateHoverElementsForProperties(enable, that, inversed, true); + } + } + }; + + /** + * Combines the sub- and superproperties into a single array, because + * they're often used equivalently. + * @returns {Array} + */ + function getSubAndSuperProperties(){ + var properties = []; + + if ( that.subproperties() ) { + properties = properties.concat(that.subproperties()); + } + if ( that.superproperties() ) { + properties = properties.concat(that.superproperties()); + } + + return properties; + } + + /** + * Foregrounds the property, its inverse and the link. + */ + this.foreground = function (){ + // check for additional objects that we can highlight + if ( !that.labelElement() ) + return; + if ( that.labelElement().node().parentNode === null ) { + return; + } + var selectedLabelGroup = that.labelElement().node().parentNode, + labelContainer = selectedLabelGroup.parentNode, + selectedLinkGroup = that.linkGroup().node(), + linkContainer = that.linkGroup().node().parentNode; + if ( that.animationProcess() === false ) { + labelContainer.appendChild(selectedLabelGroup); + } + linkContainer.appendChild(selectedLinkGroup); + }; + + /** + * Foregrounds the sub- and superproperties of this property. + * This is separated from the foreground-function to prevent endless loops. + */ + function foregroundSubAndSuperProperties(){ + var subAndSuperProperties = getSubAndSuperProperties(); + + subAndSuperProperties.forEach(function ( property ){ + if ( property.foreground ) property.foreground(); + }); + } + + function onMouseOver(){ + if ( that.mouseEntered() || ignoreLocalHoverEvents === true ) { + return; + } + that.mouseEntered(true); + that.setHighlighting(true); + that.foreground(); + foregroundSubAndSuperProperties(); + } + + function onMouseOut(){ + that.mouseEntered(false); + that.setHighlighting(false); + } + + this.drawPin = function (){ + that.pinned(true); + if ( graph.options().dynamicLabelWidth() === true ) myWidth = that.getMyWidth(); + else myWidth = defaultWidth; + + if ( that.inverse() ) { + // check which element is rendered on top and add a pin to it + var tr_that = that.labelElement().attr("transform"); + var tr_inv = that.inverse().labelElement().attr("transform"); + + var thatY = /translate\(\s*([^\s,)]+)[ ,]([^\s,)]+)/.exec(tr_that)[2]; + var invY = /translate\(\s*([^\s,)]+)[ ,]([^\s,)]+)/.exec(tr_inv)[2]; + + if ( thatY < invY ) + pinGroupElement = drawTools.drawPin(that.labelElement(), -0.5 * that.width() + 10, -25, this.removePin, graph.options().showDraggerObject, graph.options().useAccuracyHelper()); + else + pinGroupElement = drawTools.drawPin(that.inverse().labelElement(), -0.5 * that.inverse().width() + 10, -25, this.removePin, graph.options().showDraggerObject, graph.options().useAccuracyHelper()); + + } + else { + pinGroupElement = drawTools.drawPin(that.labelElement(), -0.5 * that.width() + 10, -25, this.removePin, graph.options().showDraggerObject, graph.options().useAccuracyHelper()); + } + + + }; + + /** + * Removes the pin and refreshs the graph to update the force layout. + */ + this.removePin = function (){ + that.pinned(false); + if ( pinGroupElement ) { + pinGroupElement.remove(); + } + graph.updateStyle(); + }; + + this.removeHalo = function (){ + that.halo(false); + if ( haloGroupElement ) { + haloGroupElement.remove(); + haloGroupElement = null; + } + }; + + this.animationProcess = function (){ + var animRuns = false; + if ( that.getHalos() ) { + var haloGr = that.getHalos(); + var haloEls = haloGr.selectAll(".searchResultA"); + animRuns = haloGr.attr("animationRunning"); + + if ( typeof animRuns !== "boolean" ) { + // parse this to a boolean value + animRuns = (animRuns === 'true'); + } + if ( animRuns === false ) { + haloEls.classed("searchResultA", false); + haloEls.classed("searchResultB", true); + } + } + return animRuns; + }; + + this.drawHalo = function ( pulseAnimation ){ + that.halo(true); + var offset = 0; + if ( that.labelElement() && that.labelElement().node() ) { + var labelNode = that.labelElement().node(); + var labelContainer = labelNode.parentNode; + // do this only if animation is not running + if ( that.animationProcess() === false ) + labelContainer.appendChild(labelNode); + } + haloGroupElement = drawTools.drawRectHalo(that, that.width(), that.height(), offset); + if ( haloGroupElement ) { + var haloNode = haloGroupElement.node(); + var haloContainer = haloNode.parentNode; + haloContainer.appendChild(haloNode); + } + var selectedNode; + var nodeContainer; + if ( that.pinned() ) { + selectedNode = pinGroupElement.node(); + nodeContainer = selectedNode.parentNode; + nodeContainer.appendChild(selectedNode); + } + if ( that.inverse() && that.inverse().pinned() ) { + if ( that.inverse().getPin() ) { + selectedNode = that.inverse().getPin().node(); + nodeContainer = selectedNode.parentNode; + nodeContainer.appendChild(selectedNode); + } + } + if ( pulseAnimation === false ) { + var pulseItem = haloGroupElement.selectAll(".searchResultA"); + pulseItem.classed("searchResultA", false); + pulseItem.classed("searchResultB", true); + pulseItem.attr("animationRunning", false); + } + }; + + this.getMyWidth = function (){ + var text = that.labelForCurrentLanguage(); + myWidth = measureTextWidth(text, "text") + 20; + // check for sub names; + var indicatorText = that.indicationString(); + var indicatorWidth = measureTextWidth(indicatorText, "subtext") + 20; + if ( indicatorWidth > myWidth ) + myWidth = indicatorWidth; + + return myWidth; + }; + + function measureTextWidth( text, textStyle ){ + // Set a default value + if ( !textStyle ) { + textStyle = "text"; + } + var d = d3.select("body") + .append("div") + .attr("class", textStyle) + .attr("id", "width-test") // tag this element to identify it + .attr("style", "position:absolute; float:left; white-space:nowrap; visibility:hidden;") + .text(text), + w = document.getElementById("width-test").offsetWidth; + d.remove(); + return w; + } + + this.textWidth = function (){ + return myWidth; + }; + this.width = function (){ + return myWidth; + }; + + this.animateDynamicLabelWidth = function ( dynamic ){ + that.removeHalo(); + if ( shapeElement === undefined ) {// this handles setOperatorProperties which dont have a shapeElement! + return; + } + + var h = that.height(); + if ( dynamic === true ) { + myWidth = Math.min(that.getMyWidth(), graph.options().maxLabelWidth()); + shapeElement.transition().tween("attr", function (){ + }) + .ease('linear') + .duration(100) + .attr({ x: -myWidth / 2, y: -h / 2, width: myWidth, height: h }) + .each("end", function (){ + that.updateTextElement(); + }); + } else { + // Static width for property labels = 80 + myWidth = defaultWidth; + that.updateTextElement(); + shapeElement.transition().tween("attr", function (){ + }) + .ease('linear') + .duration(100) + .attr({ x: -myWidth / 2, y: -h / 2, width: myWidth, height: h }); + } + if ( that.pinned() === true && pinGroupElement ) { + var dx = -0.5 * myWidth + 10, + dy = -25; + pinGroupElement.transition() + .tween("attr.translate", function (){ + }) + .attr("transform", "translate(" + dx + "," + dy + ")") + .ease('linear') + .duration(100); + } + }; + + this.redrawLabelText = function (){ + textElement.remove(); + that.addTextLabelElement(); + that.animateDynamicLabelWidth(graph.options().dynamicLabelWidth()); + shapeElement.select("title").text(that.labelForCurrentLanguage()); + }; + + this.addTextLabelElement = function (){ + var labelContainer = that.labelElement(); + + var equivalentsString = that.equivalentsString(); + var suffixForFollowingEquivalents = equivalentsString ? "," : ""; + + textElement = new CenteringTextElement(labelContainer, this.backgroundColor()); + textElement.addText(this.labelForCurrentLanguage(), "", suffixForFollowingEquivalents); + textElement.addEquivalents(equivalentsString); + textElement.addSubText(this.indicationString()); + }; + + this.updateTextElement = function (){ + textElement.updateAllTextElements(); + }; + this.enableEditing = function ( autoEditing ){ + if ( autoEditing === false ) + return; + that.raiseDoubleClickEdit(true); + }; + + this.raiseDoubleClickEdit = function ( forceIRISync ){ + d3.selectAll(".foreignelements").remove(); + if ( that.labelElement() === undefined || this.type() === "owl:disjointWith" || this.type() === "rdfs:subClassOf" ) { + console.log("No Container found"); + return; + } + if ( fobj !== undefined ) { + that.labelElement().selectAll(".foreignelements").remove(); + } + backupFullIri = undefined; + graph.options().focuserModule().handle(undefined); + graph.options().focuserModule().handle(that); + that.editingTextElement = true; + ignoreLocalHoverEvents = true; + that.labelElement().selectAll("rect").classed("hoveredForEditing", true); + that.frozen(true); + graph.killDelayedTimer(); + graph.ignoreOtherHoverEvents(false); + fobj = that.labelElement().append("foreignObject") + .attr("x", -0.5 * that.textWidth()) + .attr("y", -13) + .attr("height", 25) + .attr("class", "foreignelements") + .on("dragstart", function (){ + return false; + }) // remove drag operations of text element) + .attr("width", that.textWidth() - 2); + // adding a Style to the fObject + // + // + // + var editText = fobj.append("xhtml:input") + .attr("class", "nodeEditSpan") + .attr("id", that.id()) + .attr("align", "center") + .attr("contentEditable", "true") + .on("dragstart", function (){ + return false; + }); // remove drag operations of text element) + + var bgColor = '#f00'; + var txtWidth = that.textWidth() - 2; + editText.style({ + // 'line-height': '30px', + 'align': 'center', + 'color': 'black', + 'width': txtWidth + "px", + 'background-color': bgColor, + 'border-bottom': '2px solid black' + }); + var txtNode = editText.node(); + txtNode.value = that.labelForCurrentLanguage(); + txtNode.focus(); + txtNode.select(); + if ( d3.event.stopPropagation ) d3.event.stopPropagation(); + if ( d3.event.sourceEvent && d3.event.sourceEvent.stopPropagation ) d3.event.sourceEvent.stopPropagation(); + + // add some events that relate to this object + editText.on("click", function (){ + if ( d3.event.stopPropagation ) d3.event.stopPropagation(); + if ( d3.event.sourceEvent && d3.event.sourceEvent.stopPropagation ) d3.event.sourceEvent.stopPropagation(); + + }); + // // remove hover Events for now; + editText.on("mouseout", function (){ + if ( d3.event.stopPropagation ) d3.event.stopPropagation(); + if ( d3.event.sourceEvent && d3.event.sourceEvent.stopPropagation ) d3.event.sourceEvent.stopPropagation(); + }); + editText.on("mousedown", function (){ + if ( d3.event.stopPropagation ) d3.event.stopPropagation(); + if ( d3.event.sourceEvent && d3.event.sourceEvent.stopPropagation ) d3.event.sourceEvent.stopPropagation(); + }) + .on("keydown", function (){ + + if ( d3.event.keyCode === 13 ) { + this.blur(); + that.frozen(false); // << releases the not after selection + that.locked(false); + } + }) + .on("keyup", function (){ + if ( forceIRISync ) { + var labelName = editText.node().value; + var resourceName = labelName.replaceAll(" ", "_"); + var syncedIRI = that.baseIri() + resourceName; + backupFullIri = syncedIRI; + + d3.select("#element_iriEditor").node().title = syncedIRI; + d3.select("#element_iriEditor").node().value = graph.options().prefixModule().getPrefixRepresentationForFullURI(syncedIRI); + } + d3.select("#element_labelEditor").node().value = editText.node().value; + + }) + .on("blur", function (){ + + + that.editingTextElement = false; + ignoreLocalHoverEvents = false; + that.labelElement().selectAll("rect").classed("hoveredForEditing", false); + var newLabel = editText.node().value; + that.labelElement().selectAll(".foreignelements").remove(); + // that.setLabelForCurrentLanguage(classNameConvention(editText.node().value)); + that.label(newLabel); + that.backupLabel(newLabel); + that.redrawLabelText(); + updateHoverElements(true); + graph.showHoverElementsAfterAnimation(that, false); + graph.ignoreOtherHoverEvents(false); + + + that.frozen(graph.paused()); + that.locked(graph.paused()); + that.domain().frozen(graph.paused()); + that.domain().locked(graph.paused()); + that.range().frozen(graph.paused()); + that.range().locked(graph.paused()); + graph.removeEditElements(); + if ( backupFullIri ) { + // console.log("Checking if element is Identical ?"); + var sanityCheckResult = graph.options().editSidebar().checkProperIriChange(that, backupFullIri); + if ( sanityCheckResult !== false ) { + graph.options().warningModule().showWarning("Already seen this property", + "Input IRI: " + backupFullIri + " for element: " + that.labelForCurrentLanguage() + " already been set", + "Continuing with duplicate property!", 1, false, sanityCheckResult); + } + that.iri(backupFullIri); + } + graph.options().focuserModule().handle(undefined); + graph.options().focuserModule().handle(that); + graph.updatePropertyDraggerElements(that); + + + }); // add a foreiner element to this thing; + + }; + + // update hover elements + function updateHoverElements( enable ){ + if ( graph.ignoreOtherHoverEvents() === false ) { + var inversed = false; + if ( that.inverse() ) { + inversed = true; + } + if ( enable === true ) { + graph.activateHoverElementsForProperties(enable, that, inversed); + } + } + } + + that.copyInformation = function ( other ){ + that.label(other.label()); + that.iri(other.iri()); + that.baseIri(other.baseIri()); + if ( other.type() === "owl:ObjectProperty" || + other.type() === "owl:DatatypeProperty" ) { + that.backupLabel(other.label()); + // console.log("copied backup label"+that.backupLabel()); + } + if ( other.backupLabel() !== undefined ) { + that.backupLabel(other.backupLabel()); + } + }; + + forceLayoutNodeFunctions.addTo(this); + }; + + Base.prototype = Object.create(BaseElement.prototype); + Base.prototype.constructor = Base; + + Base.prototype.height = function (){ + return labelHeight; + }; + + Base.prototype.width = function (){ + return labelWidth; + }; + + Base.prototype.actualRadius = function (){ + return smallestRadius; + }; + + Base.prototype.textWidth = Base.prototype.width; + + + return Base; + }()); + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), +/* 43 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {/** + * Contains a collection of mathematical functions with some additional data + * used for WebVOWL. + */ + module.exports = (function (){ + + var math = {}, + loopFunction = d3.svg.line() + .x(function ( d ){ + return d.x; + }) + .y(function ( d ){ + return d.y; + }) + .interpolate("cardinal") + .tension(-1); + + + /** + * Calculates the normal vector of the path between the two nodes. + * @param source the first node + * @param target the second node + * @param length the length of the calculated normal vector + * @returns {{x: number, y: number}} + */ + math.calculateNormalVector = function ( source, target, length ){ + var dx = target.x - source.x, + dy = target.y - source.y; + + var nx = -dy, + ny = dx; + + var vlength = Math.sqrt(nx * nx + ny * ny); + + var ratio = vlength !== 0 ? length / vlength : 0; + + return { "x": nx * ratio, "y": ny * ratio }; + }; + + /** + * Calculates the path for a link, if it is a loop. Currently only working for circlular nodes. + * @param link the link + * @returns {*} + */ + + + + math.getLoopPoints = function ( link ){ + var node = link.domain(), + label = link.label(); + + var fairShareLoopAngle = 360 / link.loops().length, + fairShareLoopAngleWithMargin = fairShareLoopAngle * 0.8, + loopAngle = Math.min(60, fairShareLoopAngleWithMargin); + + if ( label.increasedLoopAngle === true ) + loopAngle = 120; + + + var dx = label.x - node.x, + dy = label.y - node.y, + labelRadian = Math.atan2(dy, dx), + labelAngle = calculateAngle(labelRadian); + + var startAngle = labelAngle - loopAngle / 2, + endAngle = labelAngle + loopAngle / 2; + + + var arcFrom = calculateRadian(startAngle), + arcTo = calculateRadian(endAngle), + + x1 = Math.cos(arcFrom) * node.actualRadius(), + y1 = Math.sin(arcFrom) * node.actualRadius(), + + x2 = Math.cos(arcTo) * node.actualRadius(), + y2 = Math.sin(arcTo) * node.actualRadius(), + + fixPoint1 = { "x": node.x + x1, "y": node.y + y1 }, + fixPoint2 = { "x": node.x + x2, "y": node.y + y2 }; + + return [fixPoint1, fixPoint2]; + }; + math.calculateLoopPath = function ( link ){ + var node = link.domain(), + label = link.label(); + + + var fairShareLoopAngle = 360 / link.loops().length, + fairShareLoopAngleWithMargin = fairShareLoopAngle * 0.8, + loopAngle = Math.min(60, fairShareLoopAngleWithMargin); + + if ( label.increasedLoopAngle === true ) + loopAngle = 120; + + var dx = label.x - node.x, + dy = label.y - node.y, + labelRadian = Math.atan2(dy, dx), + labelAngle = calculateAngle(labelRadian); + + var startAngle = labelAngle - loopAngle / 2, + endAngle = labelAngle + loopAngle / 2; + + var arcFrom = calculateRadian(startAngle), + arcTo = calculateRadian(endAngle), + + x1 = Math.cos(arcFrom) * node.actualRadius(), + y1 = Math.sin(arcFrom) * node.actualRadius(), + + x2 = Math.cos(arcTo) * node.actualRadius(), + y2 = Math.sin(arcTo) * node.actualRadius(), + + fixPoint1 = { "x": node.x + x1, "y": node.y + y1 }, + fixPoint2 = { "x": node.x + x2, "y": node.y + y2 }; + + return loopFunction([fixPoint1, link.label(), fixPoint2]); + }; + + math.calculateLoopPoints = function ( link ){ + var node = link.domain(), + label = link.label(); + + var fairShareLoopAngle = 360 / link.loops().length, + fairShareLoopAngleWithMargin = fairShareLoopAngle * 0.8, + loopAngle = Math.min(60, fairShareLoopAngleWithMargin); + + var dx = label.x - node.x, + dy = label.y - node.y, + labelRadian = Math.atan2(dy, dx), + labelAngle = calculateAngle(labelRadian); + + var startAngle = labelAngle - loopAngle / 2, + endAngle = labelAngle + loopAngle / 2; + + var arcFrom = calculateRadian(startAngle), + arcTo = calculateRadian(endAngle), + + x1 = Math.cos(arcFrom) * node.actualRadius(), + y1 = Math.sin(arcFrom) * node.actualRadius(), + + x2 = Math.cos(arcTo) * (node.actualRadius()), + y2 = Math.sin(arcTo) * (node.actualRadius()), + + fixPoint1 = { "x": node.x + x1, "y": node.y + y1 }, + fixPoint2 = { "x": node.x + x2, "y": node.y + y2 }; + + return [fixPoint1, link.label(), fixPoint2]; + }; + + /** + * @param angle + * @returns {number} the radian of the angle + */ + function calculateRadian( angle ){ + angle = angle % 360; + if ( angle < 0 ) { + angle = angle + 360; + } + return (Math.PI * angle) / 180; + } + + /** + * @param radian + * @returns {number} the angle of the radian + */ + function calculateAngle( radian ){ + return radian * (180 / Math.PI); + } + + /** + * Calculates the point where the link between the source and target node + * intersects the border of the target node. + * @param source the source node + * @param target the target node + * @param additionalDistance additional distance the + * @returns {{x: number, y: number}} + */ + math.calculateIntersection = function ( source, target, additionalDistance ){ + var dx = target.x - source.x, + dy = target.y - source.y, + length = Math.sqrt(dx * dx + dy * dy); + + if ( length === 0 ) { + return { x: source.x, y: source.y }; + } + + var innerDistance = target.distanceToBorder(dx, dy); + + var ratio = (length - (innerDistance + additionalDistance)) / length, + x = dx * ratio + source.x, + y = dy * ratio + source.y; + + return { x: x, y: y }; + }; + + /** + * Calculates the position between the two points. + * @param firstPoint + * @param secondPoint + * @returns {{x: number, y: number}} + */ + math.calculateCenter = function ( firstPoint, secondPoint ){ + return { + x: (firstPoint.x + secondPoint.x) / 2, + y: (firstPoint.y + secondPoint.y) / 2 + }; + }; + + + return function (){ + /* Use a function here to keep a consistent style like webvowl.path.to.module() + * despite having just a single math object. */ + return math; + }; + })(); + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), +/* 44 */ +/***/ (function(module, exports, __webpack_require__) { + + var BaseProperty = __webpack_require__(42); + + module.exports = (function (){ + + var o = function ( graph ){ + BaseProperty.apply(this, arguments); + + this.attributes(["datatype"]) + .styleClass("datatypeproperty") + .type("owl:DatatypeProperty"); + }; + o.prototype = Object.create(BaseProperty.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 45 */ +/***/ (function(module, exports, __webpack_require__) { + + var BaseProperty = __webpack_require__(42); + + module.exports = (function (){ + + var o = function ( graph ){ + BaseProperty.apply(this, arguments); + + this.attributes(["deprecated"]) + .styleClass("deprecatedproperty") + .type("owl:DeprecatedProperty"); + }; + o.prototype = Object.create(BaseProperty.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 46 */ +/***/ (function(module, exports, __webpack_require__) { + + var BaseProperty = __webpack_require__(42); + var CenteringTextElement = __webpack_require__(14); + + module.exports = (function (){ + + var o = function ( graph ){ + BaseProperty.apply(this, arguments); + + var label = "Disjoint With"; + var shapeElement; + // Disallow overwriting the label + this.label = function ( p ){ + if ( !arguments.length ) return label; + return this; + }; + + this.linkType("dashed") + .styleClass("disjointwith") + .type("owl:disjointWith"); + + this.drawLabel = function ( labelContainer ){ + shapeElement = this.addRect(labelContainer); + + labelContainer.append("circle") + .classed("symbol", true) + .classed("fineline", true) + .classed("embedded", true) + .attr("cx", -12.5) + .attr("r", 10); + + labelContainer.append("circle") + .classed("symbol", true) + .classed("fineline", true) + .classed("embedded", true) + .attr("cx", 12.5) + .attr("r", 10); + + var textElement = new CenteringTextElement(labelContainer, this.backgroundColor()); + if ( !graph.options().compactNotation() ) { + textElement.addSubText("disjoint"); + } + textElement.translation(0, 20); + }; + this.getShapeElement = function (){ + return shapeElement; + }; + this.markerElement = function (){ + return undefined; + }; + + }; + o.prototype = Object.create(BaseProperty.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 47 */ +/***/ (function(module, exports, __webpack_require__) { + + var BaseProperty = __webpack_require__(42); + + module.exports = (function (){ + + var o = function ( graph ){ + BaseProperty.apply(this, arguments); + + this.styleClass("equivalentproperty") + .type("owl:equivalentProperty"); + }; + o.prototype = Object.create(BaseProperty.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 48 */ +/***/ (function(module, exports, __webpack_require__) { + + var BaseProperty = __webpack_require__(42); + + module.exports = (function (){ + + var o = function ( graph ){ + BaseProperty.apply(this, arguments); + + this.attributes(["functional"]) + .styleClass("functionalproperty") + .type("owl:FunctionalProperty"); + }; + o.prototype = Object.create(BaseProperty.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 49 */ +/***/ (function(module, exports, __webpack_require__) { + + var BaseProperty = __webpack_require__(42); + + module.exports = (function (){ + + var o = function ( graph ){ + BaseProperty.apply(this, arguments); + + this.attributes(["inverse functional"]) + .styleClass("inversefunctionalproperty") + .type("owl:InverseFunctionalProperty"); + }; + o.prototype = Object.create(BaseProperty.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 50 */ +/***/ (function(module, exports, __webpack_require__) { + + var BaseProperty = __webpack_require__(42); + + module.exports = (function (){ + + var o = function ( graph ){ + BaseProperty.apply(this, arguments); + + this.attributes(["object"]) + .styleClass("objectproperty") + .type("owl:ObjectProperty"); + }; + o.prototype = Object.create(BaseProperty.prototype); + o.prototype.constructor = o; + + return o; + }()); + + + + +/***/ }), +/* 51 */ +/***/ (function(module, exports, __webpack_require__) { + + var BaseProperty = __webpack_require__(42); + + module.exports = (function (){ + + var o = function ( graph ){ + BaseProperty.apply(this, arguments); + + var superGenerateCardinalityText = this.generateCardinalityText; + + this.linkType("values-from") + .markerType("filled values-from") + .styleClass("somevaluesfromproperty") + .type("owl:someValuesFrom"); + + this.generateCardinalityText = function (){ + var cardinalityText = "E"; + + var superCardinalityText = superGenerateCardinalityText(); + if ( superCardinalityText ) { + cardinalityText += ", " + superCardinalityText; + } + + return cardinalityText; + }; + }; + o.prototype = Object.create(BaseProperty.prototype); + o.prototype.constructor = o; + + return o; + }()); + + + + +/***/ }), +/* 52 */ +/***/ (function(module, exports, __webpack_require__) { + + var BaseProperty = __webpack_require__(42); + + module.exports = (function (){ + + var o = function ( graph ){ + BaseProperty.apply(this, arguments); + + this.attributes(["symmetric"]) + .styleClass("symmetricproperty") + .type("owl:SymmetricProperty"); + }; + o.prototype = Object.create(BaseProperty.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 53 */ +/***/ (function(module, exports, __webpack_require__) { + + var BaseProperty = __webpack_require__(42); + + module.exports = (function (){ + + var o = function ( graph ){ + BaseProperty.apply(this, arguments); + + this.attributes(["transitive"]) + .styleClass("transitiveproperty") + .type("owl:TransitiveProperty"); + }; + o.prototype = Object.create(BaseProperty.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 54 */ +/***/ (function(module, exports, __webpack_require__) { + + var BaseProperty = __webpack_require__(42); + + module.exports = (function (){ + + var o = function ( graph ){ + BaseProperty.apply(this, arguments); + + this.attributes(["rdf"]) + .styleClass("rdfproperty") + .type("rdf:Property"); + }; + o.prototype = Object.create(BaseProperty.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 55 */ +/***/ (function(module, exports, __webpack_require__) { + + var BaseProperty = __webpack_require__(42); + + module.exports = (function (){ + + var o = function ( graph ){ + BaseProperty.apply(this, arguments); + + var that = this, + superDrawFunction = that.draw, + label = "Subclass of"; + + this.draw = function ( labelGroup ){ + that.labelVisible(!graph.options().compactNotation()); + return superDrawFunction(labelGroup); + }; + + // Disallow overwriting the label + this.label = function ( p ){ + if ( !arguments.length ) return label; + return this; + }; + + this.linkType("dotted") + .markerType("white") + .styleClass("subclass") + .type("rdfs:subClassOf"); + + that.baseIri("http://www.w3.org/2000/01/rdf-schema#"); + that.iri("http://www.w3.org/2000/01/rdf-schema#subClassOf"); + + }; + o.prototype = Object.create(BaseProperty.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 56 */ +/***/ (function(module, exports, __webpack_require__) { + + var BaseProperty = __webpack_require__(42); + + module.exports = (function (){ + + var o = function ( graph ){ + BaseProperty.apply(this, arguments); + + this.labelVisible(false) + .linkType("dashed") + .markerType("white") + .styleClass("setoperatorproperty") + .type("setOperatorProperty"); + }; + o.prototype = Object.create(BaseProperty.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 57 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {var _ = __webpack_require__(58); + var math = __webpack_require__(43)(); + var linkCreator = __webpack_require__(60)(); + var elementTools = __webpack_require__(63)(); + // add some maps for nodes and properties -- used for object generation + var nodePrototypeMap = __webpack_require__(5)(); + var propertyPrototypeMap = __webpack_require__(40)(); + + + module.exports = function ( graphContainerSelector ){ + var graph = {}, + CARDINALITY_HDISTANCE = 20, + CARDINALITY_VDISTANCE = 10, + curveFunction = d3.svg.line() + .x(function ( d ){ + return d.x; + }) + .y(function ( d ){ + return d.y; + }) + .interpolate("cardinal"), + options = __webpack_require__(64)(), + parser = __webpack_require__(65)(graph), + language = "default", + paused = false, + // Container for visual elements + graphContainer, + nodeContainer, + labelContainer, + cardinalityContainer, + linkContainer, + // Visual elements + nodeElements, + initialLoad = true, + updateRenderingDuringSimulation = false, + labelGroupElements, + linkGroups, + linkPathElements, + cardinalityElements, + // Internal data + classNodes, + labelNodes, + links, + properties, + unfilteredData, + // Graph behaviour + force, + dragBehaviour, + zoomFactor = 1.0, + centerGraphViewOnLoad = false, + transformAnimation = false, + graphTranslation = [0, 0], + graphUpdateRequired = false, + pulseNodeIds = [], + nodeArrayForPulse = [], + nodeMap = [], + locationId = 0, + defaultZoom = 1.0, + defaultTargetZoom = 0.8, + global_dof = -1, + touchDevice = false, + last_touch_time, + originalD3_dblClickFunction = null, + originalD3_touchZoomFunction = null, + + // editing elements + deleteGroupElement, + addDataPropertyGroupElement, + editContainer, + draggerLayer = null, + draggerObjectsArray = [], + delayedHider, + nodeFreezer, + hoveredNodeElement = null, + currentlySelectedNode = null, + hoveredPropertyElement = null, + draggingStarted = false, + frozenDomainForPropertyDragger, + frozenRangeForPropertyDragger, + + eP = 0, // id for new properties + eN = 0, // id for new Nodes + editMode = true, + debugContainer = d3.select("#FPS_Statistics"), + finishedLoadingSequence = false, + + ignoreOtherHoverEvents = false, + forceNotZooming = false, + now, then, // used for fps computation + showFPS = false, + seenEditorHint = false, + seenFilterWarning = false, + showFilterWarning = false, + + keepDetailsCollapsedOnLoading = true, + adjustingGraphSize = false, + showReloadButtonAfterLayoutOptimization = false, + zoom; + //var prefixModule=require("./prefixRepresentationModule")(graph); + var NodePrototypeMap = createLowerCasePrototypeMap(nodePrototypeMap); + var PropertyPrototypeMap = createLowerCasePrototypeMap(propertyPrototypeMap); + var classDragger = __webpack_require__(68)(graph); + var rangeDragger = __webpack_require__(69)(graph); + var domainDragger = __webpack_require__(70)(graph); + var shadowClone = __webpack_require__(71)(graph); + + graph.math = function (){ + return math; + }; + /** --------------------------------------------------------- **/ + /** -- getter and setter definitions -- **/ + /** --------------------------------------------------------- **/ + graph.isEditorMode = function (){ + return editMode; + }; + graph.getGlobalDOF = function (){ + return global_dof; + }; + graph.setGlobalDOF = function ( val ){ + global_dof = val; + }; + + graph.updateZoomSliderValueFromOutside = function (){ + graph.options().zoomSlider().updateZoomSliderValue(zoomFactor); + }; + + graph.setDefaultZoom = function ( val ){ + defaultZoom = val; + graph.reset(); + graph.options().zoomSlider().updateZoomSliderValue(defaultZoom); + }; + graph.setTargetZoom = function ( val ){ + defaultTargetZoom = val; + }; + graph.graphOptions = function (){ + return options; + }; + + graph.scaleFactor = function (){ + return zoomFactor; + }; + graph.translation = function (){ + return graphTranslation; + }; + + // Returns the visible nodes + graph.graphNodeElements = function (){ + return nodeElements; + }; + // Returns the visible Label Nodes + graph.graphLabelElements = function (){ + return labelNodes; + }; + + graph.graphLinkElements = function (){ + return links; + }; + + graph.setSliderZoom = function ( val ){ + + var cx = 0.5 * graph.options().width(); + var cy = 0.5 * graph.options().height(); + var cp = getWorldPosFromScreen(cx, cy, graphTranslation, zoomFactor); + var sP = [cp.x, cp.y, graph.options().height() / zoomFactor]; + var eP = [cp.x, cp.y, graph.options().height() / val]; + var pos_intp = d3.interpolateZoom(sP, eP); + + graphContainer.attr("transform", transform(sP, cx, cy)) + .transition() + .duration(1) + .attrTween("transform", function (){ + return function ( t ){ + return transform(pos_intp(t), cx, cy); + }; + }) + .each("end", function (){ + graphContainer.attr("transform", "translate(" + graphTranslation + ")scale(" + zoomFactor + ")"); + zoom.translate(graphTranslation); + zoom.scale(zoomFactor); + graph.options().zoomSlider().updateZoomSliderValue(zoomFactor); + }); + }; + + + graph.setZoom = function ( value ){ + zoom.scale(value); + }; + + graph.setTranslation = function ( translation ){ + zoom.translate([translation[0], translation[1]]); + }; + + graph.options = function (){ + return options; + }; + // search functionality + graph.getUpdateDictionary = function (){ + return parser.getDictionary(); + }; + + graph.language = function ( newLanguage ){ + if ( !arguments.length ) return language; + + // Just update if the language changes + if ( language !== newLanguage ) { + language = newLanguage || "default"; + redrawContent(); + recalculatePositions(); + graph.options().searchMenu().requestDictionaryUpdate(); + graph.resetSearchHighlight(); + } + return graph; + }; + + + /** --------------------------------------------------------- **/ + /** graph / rendering related functions **/ + /** --------------------------------------------------------- **/ + + // Initializes the graph. + function initializeGraph(){ + + options.graphContainerSelector(graphContainerSelector); + var moved = false; + force = d3.layout.force() + .on("tick", hiddenRecalculatePositions); + + dragBehaviour = d3.behavior.drag() + .origin(function ( d ){ + return d; + }) + .on("dragstart", function ( d ){ + d3.event.sourceEvent.stopPropagation(); // Prevent panning + graph.ignoreOtherHoverEvents(true); + if ( d.type && d.type() === "Class_dragger" ) { + classDragger.mouseButtonPressed = true; + clearTimeout(delayedHider); + classDragger.selectedViaTouch(true); + d.parentNode().locked(true); + draggingStarted = true; + } else if ( d.type && d.type() === "Range_dragger" ) { + graph.ignoreOtherHoverEvents(true); + clearTimeout(delayedHider); + frozenDomainForPropertyDragger = shadowClone.parentNode().domain(); + frozenRangeForPropertyDragger = shadowClone.parentNode().range(); + shadowClone.setInitialPosition(); + shadowClone.hideClone(false); + shadowClone.hideParentProperty(true); + shadowClone.updateElement(); + deleteGroupElement.classed("hidden", true); + addDataPropertyGroupElement.classed("hidden", true); + frozenDomainForPropertyDragger.frozen(true); + frozenDomainForPropertyDragger.locked(true); + frozenRangeForPropertyDragger.frozen(true); + frozenRangeForPropertyDragger.locked(true); + domainDragger.updateElement(); + domainDragger.mouseButtonPressed = true; + rangeDragger.updateElement(); + rangeDragger.mouseButtonPressed = true; + // shadowClone.setPosition(d.x, d.y); + + + } else if ( d.type && d.type() === "Domain_dragger" ) { + graph.ignoreOtherHoverEvents(true); + clearTimeout(delayedHider); + frozenDomainForPropertyDragger = shadowClone.parentNode().domain(); + frozenRangeForPropertyDragger = shadowClone.parentNode().range(); + shadowClone.setInitialPosition(); + shadowClone.hideClone(false); + shadowClone.hideParentProperty(true); + shadowClone.updateElement(); + deleteGroupElement.classed("hidden", true); + addDataPropertyGroupElement.classed("hidden", true); + + frozenDomainForPropertyDragger.frozen(true); + frozenDomainForPropertyDragger.locked(true); + frozenRangeForPropertyDragger.frozen(true); + frozenRangeForPropertyDragger.locked(true); + domainDragger.updateElement(); + domainDragger.mouseButtonPressed = true; + rangeDragger.updateElement(); + rangeDragger.mouseButtonPressed = true; + } + else { + d.locked(true); + moved = false; + } + }) + .on("drag", function ( d ){ + + if ( d.type && d.type() === "Class_dragger" ) { + clearTimeout(delayedHider); + classDragger.setPosition(d3.event.x, d3.event.y); + } else if ( d.type && d.type() === "Range_dragger" ) { + clearTimeout(delayedHider); + rangeDragger.setPosition(d3.event.x, d3.event.y); + shadowClone.setPosition(d3.event.x, d3.event.y); + domainDragger.updateElementViaRangeDragger(d3.event.x, d3.event.y); + } + else if ( d.type && d.type() === "Domain_dragger" ) { + clearTimeout(delayedHider); + domainDragger.setPosition(d3.event.x, d3.event.y); + shadowClone.setPositionDomain(d3.event.x, d3.event.y); + rangeDragger.updateElementViaDomainDragger(d3.event.x, d3.event.y); + } + + else { + d.px = d3.event.x; + d.py = d3.event.y; + force.resume(); + updateHaloRadius(); + moved = true; + if ( d.renderType && d.renderType() === "round" ) { + classDragger.setParentNode(d); + } + + } + }) + .on("dragend", function ( d ){ + graph.ignoreOtherHoverEvents(false); + if ( d.type && d.type() === "Class_dragger" ) { + var nX = classDragger.x; + var nY = classDragger.y; + clearTimeout(delayedHider); + classDragger.mouseButtonPressed = false; + classDragger.selectedViaTouch(false); + d.setParentNode(d.parentNode()); + + var draggerEndPos = [nX, nY]; + var targetNode = graph.getTargetNode(draggerEndPos); + if ( targetNode ) { + createNewObjectProperty(d.parentNode(), targetNode, draggerEndPos); + } + if ( touchDevice === false ) { + editElementHoverOut(); + } + draggingStarted = false; + } else if ( d.type && d.type() === "Range_dragger" ) { + graph.ignoreOtherHoverEvents(false); + frozenDomainForPropertyDragger.frozen(false); + frozenDomainForPropertyDragger.locked(false); + frozenRangeForPropertyDragger.frozen(false); + frozenRangeForPropertyDragger.locked(false); + rangeDragger.mouseButtonPressed = false; + domainDragger.mouseButtonPressed = false; + domainDragger.updateElement(); + rangeDragger.updateElement(); + shadowClone.hideClone(true); + var rX = rangeDragger.x; + var rY = rangeDragger.y; + var rangeDraggerEndPos = [rX, rY]; + var targetRangeNode = graph.getTargetNode(rangeDraggerEndPos); + if ( elementTools.isDatatype(targetRangeNode) === true ) { + targetRangeNode = null; + console.log("---------------TARGET NODE IS A DATATYPE/ LITERAL ------------"); + } + + if ( targetRangeNode === null ) { + d.reDrawEverthing(); + shadowClone.hideParentProperty(false); + } + else { + d.updateRange(targetRangeNode); + graph.update(); + shadowClone.hideParentProperty(false); + } + } else if ( d.type && d.type() === "Domain_dragger" ) { + graph.ignoreOtherHoverEvents(false); + frozenDomainForPropertyDragger.frozen(false); + frozenDomainForPropertyDragger.locked(false); + frozenRangeForPropertyDragger.frozen(false); + frozenRangeForPropertyDragger.locked(false); + rangeDragger.mouseButtonPressed = false; + domainDragger.mouseButtonPressed = false; + domainDragger.updateElement(); + rangeDragger.updateElement(); + shadowClone.hideClone(true); + + var dX = domainDragger.x; + var dY = domainDragger.y; + var domainDraggerEndPos = [dX, dY]; + var targetDomainNode = graph.getTargetNode(domainDraggerEndPos); + if ( elementTools.isDatatype(targetDomainNode) === true ) { + targetDomainNode = null; + console.log("---------------TARGET NODE IS A DATATYPE/ LITERAL ------------"); + } + shadowClone.hideClone(true); + if ( targetDomainNode === null ) { + d.reDrawEverthing(); + shadowClone.hideParentProperty(false); + } + else { + d.updateDomain(targetDomainNode); + graph.update(); + shadowClone.hideParentProperty(false); + } + } + + else { + d.locked(false); + var pnp = graph.options().pickAndPinModule(); + if ( pnp.enabled() === true && moved === true ) { + if ( d.id ) { // node + pnp.handle(d, true); + } + if ( d.property ) { + pnp.handle(d.property(), true); + } + } + } + }); + + // Apply the zooming factor. + zoom = d3.behavior.zoom() + .duration(150) + .scaleExtent([options.minMagnification(), options.maxMagnification()]) + .on("zoom", zoomed); + + draggerObjectsArray.push(classDragger); + draggerObjectsArray.push(rangeDragger); + draggerObjectsArray.push(domainDragger); + draggerObjectsArray.push(shadowClone); + force.stop(); + } + + graph.lazyRefresh = function (){ + redrawContent(); + recalculatePositions(); + }; + + graph.adjustingGraphSize = function ( val ){ + adjustingGraphSize = val; + }; + + graph.showReloadButtonAfterLayoutOptimization = function ( show ){ + showReloadButtonAfterLayoutOptimization = show; + }; + + + function hiddenRecalculatePositions(){ + finishedLoadingSequence = false; + if ( graph.options().loadingModule().successfullyLoadedOntology() === false ) { + force.stop(); + d3.select("#progressBarValue").node().innerHTML = ""; + graph.updateProgressBarMode(); + graph.options().loadingModule().showErrorDetailsMessage(hiddenRecalculatePositions); + if ( keepDetailsCollapsedOnLoading && adjustingGraphSize === false ) { + graph.options().loadingModule().collapseDetails("hiddenRecalculatePositions"); + } + return; + } + if ( updateRenderingDuringSimulation === false ) { + var value = 1.0 - 10 * force.alpha(); + var percent = parseInt(200 * value) + "%"; + graph.options().loadingModule().setPercentValue(percent); + d3.select("#progressBarValue").style("width", percent); + d3.select("#progressBarValue").node().innerHTML = percent; + + if ( value > 0.49 ) { + updateRenderingDuringSimulation = true; + // show graph container; + if ( graphContainer ) { + graphContainer.style("opacity", "1"); + percent = "100%"; + d3.select("#progressBarValue").style("width", percent); + d3.select("#progressBarValue").node().innerHTML = percent; + graph.options().ontologyMenu().append_message_toLastBulletPoint("done"); + d3.select("#reloadCachedOntology").classed("hidden", !showReloadButtonAfterLayoutOptimization); + if ( showFilterWarning === true && seenFilterWarning === false ) { + graph.options().warningModule().showFilterHint(); + seenFilterWarning = true; + } + } + + if ( initialLoad ) { + if ( graph.paused() === false ) + force.resume(); // resume force + initialLoad = false; + + } + + + finishedLoadingSequence = true; + if ( showFPS === true ) { + force.on("tick", recalculatePositionsWithFPS); + recalculatePositionsWithFPS(); + } + else { + force.on("tick", recalculatePositions); + recalculatePositions(); + } + + if ( centerGraphViewOnLoad === true && force.nodes().length > 0 ) { + if ( force.nodes().length < 10 ) graph.forceRelocationEvent(true); // uses dynamic zoomer; + else graph.forceRelocationEvent(); + centerGraphViewOnLoad = false; + // console.log("--------------------------------------") + } + + + graph.showEditorHintIfNeeded(); + + if ( graph.options().loadingModule().missingImportsWarning() === false ) { + graph.options().loadingModule().hideLoadingIndicator(); + graph.options().ontologyMenu().append_bulletPoint("Successfully loaded ontology"); + graph.options().loadingModule().setSuccessful(); + } else { + graph.options().loadingModule().showWarningDetailsMessage(); + graph.options().ontologyMenu().append_bulletPoint("Loaded ontology with warnings"); + } + } + } + } + + graph.showEditorHintIfNeeded = function (){ + if ( seenEditorHint === false && editMode === true ) { + seenEditorHint = true; + graph.options().warningModule().showEditorHint(); + } + }; + + graph.setForceTickFunctionWithFPS = function (){ + showFPS = true; + if ( force && finishedLoadingSequence === true ) { + force.on("tick", recalculatePositionsWithFPS); + } + + }; + graph.setDefaultForceTickFunction = function (){ + showFPS = false; + if ( force && finishedLoadingSequence === true ) { + force.on("tick", recalculatePositions); + } + }; + function recalculatePositionsWithFPS(){ + // compute the fps + + recalculatePositions(); + now = Date.now(); + var diff = now - then; + var fps = (1000 / (diff)).toFixed(2); + + debugContainer.node().innerHTML = "FPS: " + fps + "
" + "Nodes: " + force.nodes().length + "
" + "Links: " + force.links().length; + then = Date.now(); + + } + + function recalculatePositions(){ + // Set node positions + + + // add switch for edit mode to make this faster; + if ( !editMode ) { + nodeElements.attr("transform", function ( node ){ + return "translate(" + node.x + "," + node.y + ")"; + }); + + // Set label group positions + labelGroupElements.attr("transform", function ( label ){ + var position; + + // force centered positions on single-layered links + var link = label.link(); + if ( link.layers().length === 1 && !link.loops() ) { + var linkDomainIntersection = math.calculateIntersection(link.range(), link.domain(), 0); + var linkRangeIntersection = math.calculateIntersection(link.domain(), link.range(), 0); + position = math.calculateCenter(linkDomainIntersection, linkRangeIntersection); + label.x = position.x; + label.y = position.y; + } + return "translate(" + label.x + "," + label.y + ")"; + }); + // Set link paths and calculate additional information + linkPathElements.attr("d", function ( l ){ + if ( l.isLoop() ) { + return math.calculateLoopPath(l); + } + var curvePoint = l.label(); + var pathStart = math.calculateIntersection(curvePoint, l.domain(), 1); + var pathEnd = math.calculateIntersection(curvePoint, l.range(), 1); + + return curveFunction([pathStart, curvePoint, pathEnd]); + }); + + // Set cardinality positions + cardinalityElements.attr("transform", function ( property ){ + + var label = property.link().label(), + pos = math.calculateIntersection(label, property.range(), CARDINALITY_HDISTANCE), + normalV = math.calculateNormalVector(label, property.range(), CARDINALITY_VDISTANCE); + + return "translate(" + (pos.x + normalV.x) + "," + (pos.y + normalV.y) + ")"; + }); + + + updateHaloRadius(); + return; + } + + // TODO: this is Editor redraw function // we need to make this faster!! + + + nodeElements.attr("transform", function ( node ){ + return "translate(" + node.x + "," + node.y + ")"; + }); + + // Set label group positions + labelGroupElements.attr("transform", function ( label ){ + var position; + + // force centered positions on single-layered links + var link = label.link(); + if ( link.layers().length === 1 && !link.loops() ) { + var linkDomainIntersection = math.calculateIntersection(link.range(), link.domain(), 0); + var linkRangeIntersection = math.calculateIntersection(link.domain(), link.range(), 0); + position = math.calculateCenter(linkDomainIntersection, linkRangeIntersection); + label.x = position.x; + label.y = position.y; + label.linkRangeIntersection = linkRangeIntersection; + label.linkDomainIntersection = linkDomainIntersection; + if ( link.property().focused() === true || hoveredPropertyElement !== undefined ) { + rangeDragger.updateElement(); + domainDragger.updateElement(); + // shadowClone.setPosition(link.property().range().x,link.property().range().y); + // shadowClone.setPositionDomain(link.property().domain().x,link.property().domain().y); + } + } else { + label.linkDomainIntersection = math.calculateIntersection(link.label(), link.domain(), 0); + label.linkRangeIntersection = math.calculateIntersection(link.label(), link.range(), 0); + if ( link.property().focused() === true || hoveredPropertyElement !== undefined ) { + rangeDragger.updateElement(); + domainDragger.updateElement(); + // shadowClone.setPosition(link.property().range().x,link.property().range().y); + // shadowClone.setPositionDomain(link.property().domain().x,link.property().domain().y); + } + + } + return "translate(" + label.x + "," + label.y + ")"; + }); + // Set link paths and calculate additional information + linkPathElements.attr("d", function ( l ){ + if ( l.isLoop() ) { + + var ptrAr = math.getLoopPoints(l); + l.label().linkRangeIntersection = ptrAr[1]; + l.label().linkDomainIntersection = ptrAr[0]; + + if ( l.property().focused() === true || hoveredPropertyElement !== undefined ) { + rangeDragger.updateElement(); + domainDragger.updateElement(); + } + return math.calculateLoopPath(l); + } + var curvePoint = l.label(); + var pathStart = math.calculateIntersection(curvePoint, l.domain(), 1); + var pathEnd = math.calculateIntersection(curvePoint, l.range(), 1); + l.linkRangeIntersection = pathStart; + l.linkDomainIntersection = pathEnd; + if ( l.property().focused() === true || hoveredPropertyElement !== undefined ) { + domainDragger.updateElement(); + rangeDragger.updateElement(); + // shadowClone.setPosition(l.property().range().x,l.property().range().y); + // shadowClone.setPositionDomain(l.property().domain().x,l.property().domain().y); + } + return curveFunction([pathStart, curvePoint, pathEnd]); + }); + + // Set cardinality positions + cardinalityElements.attr("transform", function ( property ){ + + var label = property.link().label(), + pos = math.calculateIntersection(label, property.range(), CARDINALITY_HDISTANCE), + normalV = math.calculateNormalVector(label, property.range(), CARDINALITY_VDISTANCE); + + return "translate(" + (pos.x + normalV.x) + "," + (pos.y + normalV.y) + ")"; + }); + + if ( hoveredNodeElement ) { + setDeleteHoverElementPosition(hoveredNodeElement); + setAddDataPropertyHoverElementPosition(hoveredNodeElement); + if ( draggingStarted === false ) { + classDragger.setParentNode(hoveredNodeElement); + } + } + if ( hoveredPropertyElement ) { + setDeleteHoverElementPositionProperty(hoveredPropertyElement); + } + + updateHaloRadius(); + } + + graph.updatePropertyDraggerElements = function ( property ){ + if ( property.type() !== "owl:DatatypeProperty" ) { + + shadowClone.setParentProperty(property); + rangeDragger.setParentProperty(property); + rangeDragger.hideDragger(false); + rangeDragger.addMouseEvents(); + domainDragger.setParentProperty(property); + domainDragger.hideDragger(false); + domainDragger.addMouseEvents(); + + } + else { + rangeDragger.hideDragger(true); + domainDragger.hideDragger(true); + shadowClone.hideClone(true); + } + }; + + function addClickEvents(){ + function executeModules( selectedElement ){ + options.selectionModules().forEach(function ( module ){ + module.handle(selectedElement); + }); + } + + nodeElements.on("click", function ( clickedNode ){ + + // manaual double clicker // helper for iphone 6 etc... + if ( touchDevice === true && doubletap() === true ) { + d3.event.stopPropagation(); + if ( editMode === true ) { + clickedNode.raiseDoubleClickEdit(defaultIriValue(clickedNode)); + } + } + else { + executeModules(clickedNode); + } + }); + + nodeElements.on("dblclick", function ( clickedNode ){ + + d3.event.stopPropagation(); + if ( editMode === true ) { + clickedNode.raiseDoubleClickEdit(defaultIriValue(clickedNode)); + } + }); + + labelGroupElements.selectAll(".label").on("click", function ( clickedProperty ){ + executeModules(clickedProperty); + + // this is for enviroments that do not define dblClick function; + if ( touchDevice === true && doubletap() === true ) { + d3.event.stopPropagation(); + if ( editMode === true ) { + clickedProperty.raiseDoubleClickEdit(defaultIriValue(clickedProperty)); + } + } + + // currently removed the selection of an element to invoke the dragger + // if (editMode===true && clickedProperty.editingTextElement!==true) { + // return; + // // We say that Datatype properties are not allowed to have domain range draggers + // if (clickedProperty.focused() && clickedProperty.type() !== "owl:DatatypeProperty") { + // shadowClone.setParentProperty(clickedProperty); + // rangeDragger.setParentProperty(clickedProperty); + // rangeDragger.hideDragger(false); + // rangeDragger.addMouseEvents(); + // domainDragger.setParentProperty(clickedProperty); + // domainDragger.hideDragger(false); + // domainDragger.addMouseEvents(); + // + // if (clickedProperty.domain()===clickedProperty.range()){ + // clickedProperty.labelObject().increasedLoopAngle=true; + // recalculatePositions(); + // + // } + // + // } else if (clickedProperty.focused() && clickedProperty.type() === "owl:DatatypeProperty") { + // shadowClone.setParentProperty(clickedProperty); + // rangeDragger.setParentProperty(clickedProperty); + // rangeDragger.hideDragger(true); + // rangeDragger.addMouseEvents(); + // domainDragger.setParentProperty(clickedProperty); + // domainDragger.hideDragger(false); + // domainDragger.addMouseEvents(); + // + // } + // else { + // rangeDragger.hideDragger(true); + // domainDragger.hideDragger(true); + // if (clickedProperty.domain()===clickedProperty.range()){ + // clickedProperty.labelObject().increasedLoopAngle=false; + // recalculatePositions(); + // + // } + // } + // } + }); + labelGroupElements.selectAll(".label").on("dblclick", function ( clickedProperty ){ + d3.event.stopPropagation(); + if ( editMode === true ) { + clickedProperty.raiseDoubleClickEdit(defaultIriValue(clickedProperty)); + } + + }); + } + + function defaultIriValue( element ){ + // get the iri of that element; + if ( graph.options().getGeneralMetaObject().iri ) { + var str2Compare = graph.options().getGeneralMetaObject().iri + element.id(); + return element.iri() === str2Compare; + } + return false; + } + + /** Adjusts the containers current scale and position. */ + function zoomed(){ + if ( forceNotZooming === true ) { + zoom.translate(graphTranslation); + zoom.scale(zoomFactor); + return; + } + + + var zoomEventByMWheel = false; + if ( d3.event.sourceEvent ) { + if ( d3.event.sourceEvent.deltaY ) zoomEventByMWheel = true; + } + if ( zoomEventByMWheel === false ) { + if ( transformAnimation === true ) { + return; + } + zoomFactor = d3.event.scale; + graphTranslation = d3.event.translate; + graphContainer.attr("transform", "translate(" + graphTranslation + ")scale(" + zoomFactor + ")"); + updateHaloRadius(); + graph.options().zoomSlider().updateZoomSliderValue(zoomFactor); + return; + } + /** animate the transition **/ + zoomFactor = d3.event.scale; + graphTranslation = d3.event.translate; + graphContainer.transition() + .tween("attr.translate", function (){ + return function ( t ){ + transformAnimation = true; + var tr = d3.transform(graphContainer.attr("transform")); + graphTranslation[0] = tr.translate[0]; + graphTranslation[1] = tr.translate[1]; + zoomFactor = tr.scale[0]; + updateHaloRadius(); + graph.options().zoomSlider().updateZoomSliderValue(zoomFactor); + }; + }) + .each("end", function (){ + transformAnimation = false; + }) + .attr("transform", "translate(" + graphTranslation + ")scale(" + zoomFactor + ")") + .ease('linear') + .duration(250); + }// end of zoomed function + + function redrawGraph(){ + remove(); + + graphContainer = d3.selectAll(options.graphContainerSelector()) + .append("svg") + .classed("vowlGraph", true) + .attr("width", options.width()) + .attr("height", options.height()) + .call(zoom) + .append("g"); + // add touch and double click functions + + var svgGraph = d3.selectAll(".vowlGraph"); + originalD3_dblClickFunction = svgGraph.on("dblclick.zoom"); + originalD3_touchZoomFunction = svgGraph.on("touchstart"); + svgGraph.on("touchstart", touchzoomed); + if ( editMode === true ) { + svgGraph.on("dblclick.zoom", graph.modified_dblClickFunction); + } + else { + svgGraph.on("dblclick.zoom", originalD3_dblClickFunction); + } + + } + + function generateEditElements(){ + addDataPropertyGroupElement = editContainer.append('g') + .classed("hidden-in-export", true) + .classed("hidden", true) + .classed("addDataPropertyElement", true) + .attr("transform", "translate(" + 0 + "," + 0 + ")"); + + + addDataPropertyGroupElement.append("circle") + // .classed("deleteElement", true) + .attr("r", 12) + .attr("cx", 0) + .attr("cy", 0) + .append("title").text("Add Datatype Property"); + + addDataPropertyGroupElement.append("line") + // .classed("deleteElementIcon ",true) + .attr("x1", -8) + .attr("y1", 0) + .attr("x2", 8) + .attr("y2", 0) + .append("title").text("Add Datatype Property"); + + addDataPropertyGroupElement.append("line") + // .classed("deleteElementIcon",true) + .attr("x1", 0) + .attr("y1", -8) + .attr("x2", 0) + .attr("y2", 8) + .append("title").text("Add Datatype Property"); + + if ( graph.options().useAccuracyHelper() ) { + addDataPropertyGroupElement.append("circle") + .attr("r", 15) + .attr("cx", -7) + .attr("cy", 7) + .classed("superHiddenElement", true) + .classed("superOpacityElement", !graph.options().showDraggerObject()); + } + + + deleteGroupElement = editContainer.append('g') + .classed("hidden-in-export", true) + .classed("hidden", true) + .classed("deleteParentElement", true) + .attr("transform", "translate(" + 0 + "," + 0 + ")"); + + deleteGroupElement.append("circle") + .attr("r", 12) + .attr("cx", 0) + .attr("cy", 0) + .append("title").text("Delete This Node"); + + var crossLen = 5; + deleteGroupElement.append("line") + .attr("x1", -crossLen) + .attr("y1", -crossLen) + .attr("x2", crossLen) + .attr("y2", crossLen) + .append("title").text("Delete This Node"); + + deleteGroupElement.append("line") + .attr("x1", crossLen) + .attr("y1", -crossLen) + .attr("x2", -crossLen) + .attr("y2", crossLen) + .append("title").text("Delete This Node"); + + if ( graph.options().useAccuracyHelper() ) { + deleteGroupElement.append("circle") + .attr("r", 15) + .attr("cx", 7) + .attr("cy", -7) + .classed("superHiddenElement", true) + .classed("superOpacityElement", !graph.options().showDraggerObject()); + } + + + } + + graph.getUnfilteredData = function (){ + return unfilteredData; + }; + + graph.getClassDataForTtlExport = function (){ + var allNodes = unfilteredData.nodes; + var nodeData = []; + for ( var i = 0; i < allNodes.length; i++ ) { + if ( allNodes[i].type() !== "rdfs:Literal" && + allNodes[i].type() !== "rdfs:Datatype" && + allNodes[i].type() !== "owl:Thing" ) { + nodeData.push(allNodes[i]); + } + } + return nodeData; + }; + + graph.getPropertyDataForTtlExport = function (){ + var propertyData = []; + var allProperties = unfilteredData.properties; + for ( var i = 0; i < allProperties.length; i++ ) { + // currently using only the object properties + if ( allProperties[i].type() === "owl:ObjectProperty" || + allProperties[i].type() === "owl:DatatypeProperty" || + allProperties[i].type() === "owl:ObjectProperty" + + ) { + propertyData.push(allProperties[i]); + } else { + if ( allProperties[i].type() === "rdfs:subClassOf" ) { + allProperties[i].baseIri("http://www.w3.org/2000/01/rdf-schema#"); + allProperties[i].iri("http://www.w3.org/2000/01/rdf-schema#subClassOf"); + } + if ( allProperties[i].type() === "owl:disjointWith" ) { + allProperties[i].baseIri("http://www.w3.org/2002/07/owl#"); + allProperties[i].iri("http://www.w3.org/2002/07/owl#disjointWith"); + } + } + } + return propertyData; + }; + + graph.getAxiomsForTtlExport = function (){ + var axioms = []; + var allProperties = unfilteredData.properties; + for ( var i = 0; i < allProperties.length; i++ ) { + // currently using only the object properties + if ( allProperties[i].type() === "owl:ObjectProperty" || + allProperties[i].type() === "owl:DatatypeProperty" || + allProperties[i].type() === "owl:ObjectProperty" || + allProperties[i].type() === "rdfs:subClassOf" + ) { + } else { + } + } + return axioms; + }; + + + graph.getUnfilteredData = function (){ + return unfilteredData; + }; + + graph.getClassDataForTtlExport = function (){ + var allNodes = unfilteredData.nodes; + var nodeData = []; + for ( var i = 0; i < allNodes.length; i++ ) { + if ( allNodes[i].type() !== "rdfs:Literal" && + allNodes[i].type() !== "rdfs:Datatype" && + allNodes[i].type() !== "owl:Thing" ) { + nodeData.push(allNodes[i]); + } + } + return nodeData; + }; + + + function redrawContent(){ + var markerContainer; + + if ( !graphContainer ) { + return; + } + + // Empty the graph container + graphContainer.selectAll("*").remove(); + + // Last container -> elements of this container overlap others + linkContainer = graphContainer.append("g").classed("linkContainer", true); + cardinalityContainer = graphContainer.append("g").classed("cardinalityContainer", true); + labelContainer = graphContainer.append("g").classed("labelContainer", true); + nodeContainer = graphContainer.append("g").classed("nodeContainer", true); + + // adding editing Elements + var draggerPathLayer = graphContainer.append("g").classed("linkContainer", true); + draggerLayer = graphContainer.append("g").classed("editContainer", true); + editContainer = graphContainer.append("g").classed("editContainer", true); + + draggerPathLayer.classed("hidden-in-export", true); + editContainer.classed("hidden-in-export", true); + draggerLayer.classed("hidden-in-export", true); + + // Add an extra container for all markers + markerContainer = linkContainer.append("defs"); + var drElement = draggerLayer.selectAll(".node") + .data(draggerObjectsArray).enter() + .append("g") + .classed("node", true) + .classed("hidden-in-export", true) + .attr("id", function ( d ){ + return d.id(); + }) + .call(dragBehaviour); + drElement.each(function ( node ){ + node.svgRoot(d3.select(this)); + node.svgPathLayer(draggerPathLayer); + if ( node.type() === "shadowClone" ) { + node.drawClone(); + node.hideClone(true); + } else { + node.drawNode(); + node.hideDragger(true); + } + }); + generateEditElements(); + + + // Add an extra container for all markers + markerContainer = linkContainer.append("defs"); + + // Draw nodes + + if ( classNodes === undefined ) classNodes = []; + + nodeElements = nodeContainer.selectAll(".node") + .data(classNodes).enter() + .append("g") + .classed("node", true) + .attr("id", function ( d ){ + return d.id(); + }) + .call(dragBehaviour); + nodeElements.each(function ( node ){ + node.draw(d3.select(this)); + }); + + + if ( labelNodes === undefined ) labelNodes = []; + + // Draw label groups (property + inverse) + labelGroupElements = labelContainer.selectAll(".labelGroup") + .data(labelNodes).enter() + .append("g") + .classed("labelGroup", true) + .call(dragBehaviour); + + labelGroupElements.each(function ( label ){ + var success = label.draw(d3.select(this)); + label.property().labelObject(label); + // Remove empty groups without a label. + if ( !success ) { + d3.select(this).remove(); + } + }); + // Place subclass label groups on the bottom of all labels + labelGroupElements.each(function ( label ){ + // the label might be hidden e.g. in compact notation + if ( !this.parentNode ) { + return; + } + + if ( elementTools.isRdfsSubClassOf(label.property()) ) { + var parentNode = this.parentNode; + parentNode.insertBefore(this, parentNode.firstChild); + } + }); + if ( properties === undefined ) properties = []; + // Draw cardinality elements + cardinalityElements = cardinalityContainer.selectAll(".cardinality") + .data(properties).enter() + .append("g") + .classed("cardinality", true); + + cardinalityElements.each(function ( property ){ + var success = property.drawCardinality(d3.select(this)); + + // Remove empty groups without a label. + if ( !success ) { + d3.select(this).remove(); + } + }); + // Draw links + if ( links === undefined ) links = []; + linkGroups = linkContainer.selectAll(".link") + .data(links).enter() + .append("g") + .classed("link", true); + + linkGroups.each(function ( link ){ + link.draw(d3.select(this), markerContainer); + }); + linkPathElements = linkGroups.selectAll("path"); + // Select the path for direct access to receive a better performance + addClickEvents(); + } + + function remove(){ + if ( graphContainer ) { + // Select the parent element because the graph container is a group (e.g. for zooming) + d3.select(graphContainer.node().parentNode).remove(); + } + } + + initializeGraph(); // << call the initialization function + + graph.updateCanvasContainerSize = function (){ + if ( graphContainer ) { + var svgElement = d3.selectAll(".vowlGraph"); + svgElement.attr("width", options.width()); + svgElement.attr("height", options.height()); + graphContainer.attr("transform", "translate(" + graphTranslation + ")scale(" + zoomFactor + ")"); + } + }; + + // Loads all settings, removes the old graph (if it exists) and draws a new one. + graph.start = function (){ + force.stop(); + loadGraphData(true); + redrawGraph(); + graph.update(true); + + if ( graph.options().loadingModule().successfullyLoadedOntology() === false ) { + graph.options().loadingModule().setErrorMode(); + } + + }; + + // Updates only the style of the graph. + graph.updateStyle = function (){ + refreshGraphStyle(); + if ( graph.options().loadingModule().successfullyLoadedOntology() === false ) { + force.stop(); + } else { + force.start(); + } + }; + + graph.reload = function (){ + loadGraphData(); + graph.update(); + + }; + + graph.load = function (){ + force.stop(); + loadGraphData(); + refreshGraphData(); + for ( var i = 0; i < labelNodes.length; i++ ) { + var label = labelNodes[i]; + if ( label.property().x && label.property().y ) { + label.x = label.property().x; + label.y = label.property().y; + // also set the prev position of the label + label.px = label.x; + label.py = label.y; + } + } + graph.update(); + }; + + graph.fastUpdate = function (){ + // fast update function for editor calls; + // -- experimental ; + quick_refreshGraphData(); + updateNodeMap(); + force.start(); + redrawContent(); + graph.updatePulseIds(nodeArrayForPulse); + refreshGraphStyle(); + updateHaloStyles(); + + }; + + graph.getNodeMapForSearch = function (){ + return nodeMap; + }; + function updateNodeMap(){ + nodeMap = []; + var node; + for ( var j = 0; j < force.nodes().length; j++ ) { + node = force.nodes()[j]; + if ( node.id ) { + nodeMap[node.id()] = j; + // check for equivalents + var eqs = node.equivalents(); + if ( eqs.length > 0 ) { + for ( var e = 0; e < eqs.length; e++ ) { + var eqObject = eqs[e]; + nodeMap[eqObject.id()] = j; + } + } + } + if ( node.property ) { + nodeMap[node.property().id()] = j; + var inverse = node.inverse(); + if ( inverse ) { + nodeMap[inverse.id()] = j; + } + } + } + } + + function updateHaloStyles(){ + var haloElement; + var halo; + var node; + for ( var j = 0; j < force.nodes().length; j++ ) { + node = force.nodes()[j]; + if ( node.id ) { + haloElement = node.getHalos(); + if ( haloElement ) { + halo = haloElement.selectAll(".searchResultA"); + halo.classed("searchResultA", false); + halo.classed("searchResultB", true); + } + } + + if ( node.property ) { + haloElement = node.property().getHalos(); + if ( haloElement ) { + halo = haloElement.selectAll(".searchResultA"); + halo.classed("searchResultA", false); + halo.classed("searchResultB", true); + } + } + } + } + + // Updates the graphs displayed data and style. + graph.update = function ( init ){ + var validOntology = graph.options().loadingModule().successfullyLoadedOntology(); + if ( validOntology === false && (init && init === true) ) { + graph.options().loadingModule().collapseDetails(); + return; + } + if ( validOntology === false ) { + return; + } + + keepDetailsCollapsedOnLoading = false; + refreshGraphData(); + // update node map + updateNodeMap(); + + force.start(); + redrawContent(); + graph.updatePulseIds(nodeArrayForPulse); + refreshGraphStyle(); + updateHaloStyles(); + }; + + graph.paused = function ( p ){ + if ( !arguments.length ) return paused; + paused = p; + graph.updateStyle(); + return graph; + }; + // resetting the graph + graph.reset = function (){ + // window size + var w = 0.5 * graph.options().width(); + var h = 0.5 * graph.options().height(); + // computing initial translation for the graph due tue the dynamic default zoom level + var tx = w - defaultZoom * w; + var ty = h - defaultZoom * h; + zoom.translate([tx, ty]) + .scale(defaultZoom); + }; + + + graph.zoomOut = function (){ + + var minMag = options.minMagnification(), + maxMag = options.maxMagnification(); + var stepSize = (maxMag - minMag) / 10; + var val = zoomFactor - stepSize; + if ( val < minMag ) val = minMag; + + var cx = 0.5 * graph.options().width(); + var cy = 0.5 * graph.options().height(); + var cp = getWorldPosFromScreen(cx, cy, graphTranslation, zoomFactor); + var sP = [cp.x, cp.y, graph.options().height() / zoomFactor]; + var eP = [cp.x, cp.y, graph.options().height() / val]; + var pos_intp = d3.interpolateZoom(sP, eP); + + graphContainer.attr("transform", transform(sP, cx, cy)) + .transition() + .duration(250) + .attrTween("transform", function (){ + return function ( t ){ + return transform(pos_intp(t), cx, cy); + }; + }) + .each("end", function (){ + graphContainer.attr("transform", "translate(" + graphTranslation + ")scale(" + zoomFactor + ")"); + zoom.translate(graphTranslation); + zoom.scale(zoomFactor); + updateHaloRadius(); + options.zoomSlider().updateZoomSliderValue(zoomFactor); + }); + + }; + + graph.zoomIn = function (){ + var minMag = options.minMagnification(), + maxMag = options.maxMagnification(); + var stepSize = (maxMag - minMag) / 10; + var val = zoomFactor + stepSize; + if ( val > maxMag ) val = maxMag; + var cx = 0.5 * graph.options().width(); + var cy = 0.5 * graph.options().height(); + var cp = getWorldPosFromScreen(cx, cy, graphTranslation, zoomFactor); + var sP = [cp.x, cp.y, graph.options().height() / zoomFactor]; + var eP = [cp.x, cp.y, graph.options().height() / val]; + var pos_intp = d3.interpolateZoom(sP, eP); + + graphContainer.attr("transform", transform(sP, cx, cy)) + .transition() + .duration(250) + .attrTween("transform", function (){ + return function ( t ){ + return transform(pos_intp(t), cx, cy); + }; + }) + .each("end", function (){ + graphContainer.attr("transform", "translate(" + graphTranslation + ")scale(" + zoomFactor + ")"); + zoom.translate(graphTranslation); + zoom.scale(zoomFactor); + updateHaloRadius(); + options.zoomSlider().updateZoomSliderValue(zoomFactor); + }); + + + }; + + /** --------------------------------------------------------- **/ + /** -- data related handling -- **/ + /** --------------------------------------------------------- **/ + + var cachedJsonOBJ = null; + graph.clearAllGraphData = function (){ + if ( graph.graphNodeElements() && graph.graphNodeElements().length > 0 ) { + cachedJsonOBJ = graph.options().exportMenu().createJSON_exportObject(); + } else { + cachedJsonOBJ = null; + } + force.stop(); + if ( unfilteredData ) { + unfilteredData.nodes = []; + unfilteredData.properties = []; + } + }; + graph.getCachedJsonObj = function (){ + return cachedJsonOBJ; + }; + + // removes data when data could not be loaded + graph.clearGraphData = function (){ + force.stop(); + var sidebar = graph.options().sidebar(); + if ( sidebar ) + sidebar.clearOntologyInformation(); + if ( graphContainer ) + redrawGraph(); + }; + + function generateDictionary( data ){ + var i; + var originalDictionary = []; + var nodes = data.nodes; + for ( i = 0; i < nodes.length; i++ ) { + // check if node has a label + if ( nodes[i].labelForCurrentLanguage() !== undefined ) + originalDictionary.push(nodes[i]); + } + var props = data.properties; + for ( i = 0; i < props.length; i++ ) { + if ( props[i].labelForCurrentLanguage() !== undefined ) + originalDictionary.push(props[i]); + } + parser.setDictionary(originalDictionary); + + var literFilter = graph.options().literalFilter(); + var idsToRemove = literFilter.removedNodes(); + var originalDict = parser.getDictionary(); + var newDict = []; + + // go through the dictionary and remove the ids; + for ( i = 0; i < originalDict.length; i++ ) { + var dictElement = originalDict[i]; + var dictElementId; + if ( dictElement.property ) + dictElementId = dictElement.property().id(); + else + dictElementId = dictElement.id(); + // compare against the removed ids; + var addToDictionary = true; + for ( var j = 0; j < idsToRemove.length; j++ ) { + var currentId = idsToRemove[j]; + if ( currentId === dictElementId ) { + addToDictionary = false; + } + } + if ( addToDictionary === true ) { + newDict.push(dictElement); + } + } + // tell the parser that the dictionary is updated + parser.setDictionary(newDict); + + } + + graph.updateProgressBarMode = function (){ + var loadingModule = graph.options().loadingModule(); + + var state = loadingModule.getProgressBarMode(); + switch ( state ) { + case 0: + loadingModule.setErrorMode(); + break; + case 1: + loadingModule.setBusyMode(); + break; + case 2: + loadingModule.setPercentMode(); + break; + default: + loadingModule.setPercentMode(); + } + }; + + graph.setFilterWarning = function ( val ){ + showFilterWarning = val; + }; + function loadGraphData( init ){ + // reset the locate button and previously selected locations and other variables + + var loadingModule = graph.options().loadingModule(); + force.stop(); + + force.nodes([]); + force.links([]); + nodeArrayForPulse = []; + pulseNodeIds = []; + locationId = 0; + d3.select("#locateSearchResult").classed("highlighted", false); + d3.select("#locateSearchResult").node().title = "Nothing to locate"; + graph.clearGraphData(); + + if ( init ) { + force.stop(); + return; + } + + showFilterWarning = false; + parser.parse(options.data()); + unfilteredData = { + nodes: parser.nodes(), + properties: parser.properties() + }; + // fixing class and property id counter for the editor + eN = unfilteredData.nodes.length + 1; + eP = unfilteredData.properties.length + 1; + + initialLoad = true; + graph.options().warningModule().closeFilterHint(); + + // loading handler + updateRenderingDuringSimulation = true; + var validOntology = graph.options().loadingModule().successfullyLoadedOntology(); + if ( graphContainer && validOntology === true ) { + + updateRenderingDuringSimulation = false; + graph.options().ontologyMenu().append_bulletPoint("Generating visualization ... "); + loadingModule.setPercentMode(); + + if ( unfilteredData.nodes.length > 0 ) { + graphContainer.style("opacity", "0"); + force.on("tick", hiddenRecalculatePositions); + } else { + graphContainer.style("opacity", "1"); + if ( showFPS === true ) { + force.on("tick", recalculatePositionsWithFPS); + } + else { + force.on("tick", recalculatePositions); + } + } + + force.start(); + } else { + force.stop(); + graph.options().ontologyMenu().append_bulletPoint("Failed to load ontology"); + loadingModule.setErrorMode(); + } + // update prefixList( + // update general MetaOBJECT + graph.options().clearMetaObject(); + graph.options().clearGeneralMetaObject(); + graph.options().editSidebar().clearMetaObjectValue(); + if ( options.data() !== undefined ) { + var header = options.data().header; + if ( header ) { + if ( header.iri ) { + graph.options().addOrUpdateGeneralObjectEntry("iri", header.iri); + } + if ( header.title ) { + graph.options().addOrUpdateGeneralObjectEntry("title", header.title); + } + if ( header.author ) { + graph.options().addOrUpdateGeneralObjectEntry("author", header.author); + } + if ( header.version ) { + graph.options().addOrUpdateGeneralObjectEntry("version", header.version); + } + if ( header.description ) { + graph.options().addOrUpdateGeneralObjectEntry("description", header.description); + } + if ( header.prefixList ) { + var pL = header.prefixList; + for ( var pr in pL ) { + if ( pL.hasOwnProperty(pr) ) { + var val = pL[pr]; + graph.options().addPrefix(pr, val); + } + } + } + // get other metadata; + if ( header.other ) { + var otherObjects = header.other; + for ( var name in otherObjects ) { + if ( otherObjects.hasOwnProperty(name) ) { + var otherObj = otherObjects[name]; + if ( otherObj.hasOwnProperty("identifier") && otherObj.hasOwnProperty("value") ) { + graph.options().addOrUpdateMetaObjectEntry(otherObj.identfier, otherObj.value); + } + } + } + } + } + } + // update more meta OBJECT + // Initialize filters with data to replicate consecutive filtering + var initializationData = _.clone(unfilteredData); + options.filterModules().forEach(function ( module ){ + initializationData = filterFunction(module, initializationData, true); + }); + // generate dictionary here ; + generateDictionary(unfilteredData); + + parser.parseSettings(); + graphUpdateRequired = parser.settingsImported(); + centerGraphViewOnLoad = true; + if ( parser.settingsImportGraphZoomAndTranslation() === true ) { + centerGraphViewOnLoad = false; + } + graph.options().searchMenu().requestDictionaryUpdate(); + graph.options().editSidebar().updateGeneralOntologyInfo(); + graph.options().editSidebar().updatePrefixUi(); + graph.options().editSidebar().updateElementWidth(); + } + + graph.handleOnLoadingError = function (){ + force.stop(); + graph.clearGraphData(); + graph.options().ontologyMenu().append_bulletPoint("Failed to load ontology"); + d3.select("#progressBarValue").node().innherHTML = ""; + d3.select("#progressBarValue").classed("busyProgressBar", false); + graph.options().loadingModule().setErrorMode(); + graph.options().loadingModule().showErrorDetailsMessage(); + }; + + function quick_refreshGraphData(){ + links = linkCreator.createLinks(properties); + labelNodes = links.map(function ( link ){ + return link.label(); + }); + + storeLinksOnNodes(classNodes, links); + setForceLayoutData(classNodes, labelNodes, links); + } + + //Applies the data of the graph options object and parses it. The graph is not redrawn. + function refreshGraphData(){ + var shouldExecuteEmptyFilter = options.literalFilter().enabled(); + graph.executeEmptyLiteralFilter(); + options.literalFilter().enabled(shouldExecuteEmptyFilter); + + var preprocessedData = _.clone(unfilteredData); + + // Filter the data + options.filterModules().forEach(function ( module ){ + preprocessedData = filterFunction(module, preprocessedData); + }); + options.focuserModule().handle(undefined, true); + classNodes = preprocessedData.nodes; + properties = preprocessedData.properties; + links = linkCreator.createLinks(properties); + labelNodes = links.map(function ( link ){ + return link.label(); + }); + storeLinksOnNodes(classNodes, links); + setForceLayoutData(classNodes, labelNodes, links); + // for (var i = 0; i < classNodes.length; i++) { + // if (classNodes[i].setRectangularRepresentation) + // classNodes[i].setRectangularRepresentation(graph.options().rectangularRepresentation()); + // } + } + + function filterFunction( module, data, initializing ){ + links = linkCreator.createLinks(data.properties); + storeLinksOnNodes(data.nodes, links); + + if ( initializing ) { + if ( module.initialize ) { + module.initialize(data.nodes, data.properties); + } + } + module.filter(data.nodes, data.properties); + return { + nodes: module.filteredNodes(), + properties: module.filteredProperties() + }; + } + + + /** --------------------------------------------------------- **/ + /** -- force-layout related functions -- **/ + /** --------------------------------------------------------- **/ + function storeLinksOnNodes( nodes, links ){ + for ( var i = 0, nodesLength = nodes.length; i < nodesLength; i++ ) { + var node = nodes[i], + connectedLinks = []; + + // look for properties where this node is the domain or range + for ( var j = 0, linksLength = links.length; j < linksLength; j++ ) { + var link = links[j]; + + if ( link.domain() === node || link.range() === node ) { + connectedLinks.push(link); + } + } + node.links(connectedLinks); + } + } + + function setForceLayoutData( classNodes, labelNodes, links ){ + var d3Links = []; + links.forEach(function ( link ){ + d3Links = d3Links.concat(link.linkParts()); + }); + + var d3Nodes = [].concat(classNodes).concat(labelNodes); + setPositionOfOldLabelsOnNewLabels(force.nodes(), labelNodes); + + force.nodes(d3Nodes) + .links(d3Links); + } + + // The label nodes are positioned randomly, because they are created from scratch if the data changes and lose + // their position information. With this hack the position of old labels is copied to the new labels. + function setPositionOfOldLabelsOnNewLabels( oldLabelNodes, labelNodes ){ + labelNodes.forEach(function ( labelNode ){ + for ( var i = 0; i < oldLabelNodes.length; i++ ) { + var oldNode = oldLabelNodes[i]; + if ( oldNode.equals(labelNode) ) { + labelNode.x = oldNode.x; + labelNode.y = oldNode.y; + labelNode.px = oldNode.px; + labelNode.py = oldNode.py; + break; + } + } + }); + } + + // Applies all options that don't change the graph data. + function refreshGraphStyle(){ + zoom = zoom.scaleExtent([options.minMagnification(), options.maxMagnification()]); + if ( graphContainer ) { + zoom.event(graphContainer); + } + + force.charge(function ( element ){ + var charge = options.charge(); + if ( elementTools.isLabel(element) ) { + charge *= 0.8; + } + return charge; + }) + .size([options.width(), options.height()]) + .linkDistance(calculateLinkPartDistance) + .gravity(options.gravity()) + .linkStrength(options.linkStrength()); // Flexibility of links + + force.nodes().forEach(function ( n ){ + n.frozen(paused); + }); + } + + function calculateLinkPartDistance( linkPart ){ + var link = linkPart.link(); + + if ( link.isLoop() ) { + return options.loopDistance(); + } + + // divide by 2 to receive the length for a single link part + var linkPartDistance = getVisibleLinkDistance(link) / 2; + linkPartDistance += linkPart.domain().actualRadius(); + linkPartDistance += linkPart.range().actualRadius(); + return linkPartDistance; + } + + function getVisibleLinkDistance( link ){ + if ( elementTools.isDatatype(link.domain()) || elementTools.isDatatype(link.range()) ) { + return options.datatypeDistance(); + } else { + return options.classDistance(); + } + } + + /** --------------------------------------------------------- **/ + /** -- animation functions for the nodes -- **/ + /** --------------------------------------------------------- **/ + + graph.animateDynamicLabelWidth = function (){ + var wantedWidth = options.dynamicLabelWidth(); + var i; + for ( i = 0; i < classNodes.length; i++ ) { + var nodeElement = classNodes[i]; + if ( elementTools.isDatatype(nodeElement) ) { + nodeElement.animateDynamicLabelWidth(wantedWidth); + } + } + for ( i = 0; i < properties.length; i++ ) { + properties[i].animateDynamicLabelWidth(wantedWidth); + } + }; + + + /** --------------------------------------------------------- **/ + /** -- halo and localization functions -- **/ + /** --------------------------------------------------------- **/ + function updateHaloRadius(){ + if ( pulseNodeIds && pulseNodeIds.length > 0 ) { + var forceNodes = force.nodes(); + for ( var i = 0; i < pulseNodeIds.length; i++ ) { + var node = forceNodes[pulseNodeIds[i]]; + if ( node ) { + if ( node.property ) { + // match search strings with property label + if ( node.property().inverse ) { + var searchString = graph.options().searchMenu().getSearchString().toLowerCase(); + var name = node.property().labelForCurrentLanguage().toLowerCase(); + if ( name === searchString ) computeDistanceToCenter(node); + else { + node.property().removeHalo(); + if ( node.property().inverse() ) { + if ( !node.property().inverse().getHalos() ) + node.property().inverse().drawHalo(); + computeDistanceToCenter(node, true); + } + if ( node.property().equivalents() ) { + var eq = node.property().equivalents(); + for ( var e = 0; e < eq.length; e++ ) { + if ( !eq[e].getHalos() ) + eq[e].drawHalo(); + } + if ( !node.property().getHalos() ) + node.property().drawHalo(); + computeDistanceToCenter(node, false); + + } + } + } + } + computeDistanceToCenter(node); + } + } + } + } + + function getScreenCoords( x, y, translate, scale ){ + var xn = translate[0] + x * scale; + var yn = translate[1] + y * scale; + return { x: xn, y: yn }; + } + + function getClickedScreenCoords( x, y, translate, scale ){ + var xn = (x - translate[0]) / scale; + var yn = (y - translate[1]) / scale; + return { x: xn, y: yn }; + } + + + function computeDistanceToCenter( node, inverse ){ + var container = node; + var w = graph.options().width(); + var h = graph.options().height(); + var posXY = getScreenCoords(node.x, node.y, graphTranslation, zoomFactor); + + var highlightOfInv = false; + + if ( inverse && inverse === true ) { + highlightOfInv = true; + posXY = getScreenCoords(node.x, node.y + 20, graphTranslation, zoomFactor); + } + var x = posXY.x; + var y = posXY.y; + var nodeIsRect = false; + var halo; + var roundHalo; + var rectHalo; + var borderPoint_x = 0; + var borderPoint_y = 0; + var defaultRadius; + var offset = 15; + var radius; + + if ( node.property && highlightOfInv === true ) { + if ( node.property().inverse() ) { + rectHalo = node.property().inverse().getHalos().select("rect"); + + } else { + if ( node.property().getHalos() ) + rectHalo = node.property().getHalos().select("rect"); + else { + node.property().drawHalo(); + rectHalo = node.property().getHalos().select("rect"); + } + } + rectHalo.classed("hidden", true); + if ( node.property().inverse() ) { + if ( node.property().inverse().getHalos() ) { + roundHalo = node.property().inverse().getHalos().select("circle"); + } + } else { + roundHalo = node.property().getHalos().select("circle"); + } + if ( roundHalo.node() === null ) { + radius = node.property().inverse().width() + 15; + + roundHalo = node.property().inverse().getHalos().append("circle") + .classed("searchResultB", true) + .classed("searchResultA", false) + .attr("r", radius + 15); + + } + halo = roundHalo; // swap the halo to be round + nodeIsRect = true; + container = node.property().inverse(); + } + + if ( node.id ) { + if ( !node.getHalos() ) return; // something went wrong before + halo = node.getHalos().select("rect"); + if ( halo.node() === null ) { + // this is a round node + nodeIsRect = false; + roundHalo = node.getHalos().select("circle"); + defaultRadius = node.actualRadius(); + roundHalo.attr("r", defaultRadius + offset); + halo = roundHalo; + } else { // this is a rect node + nodeIsRect = true; + rectHalo = node.getHalos().select("rect"); + rectHalo.classed("hidden", true); + roundHalo = node.getHalos().select("circle"); + if ( roundHalo.node() === null ) { + radius = node.width(); + roundHalo = node.getHalos().append("circle") + .classed("searchResultB", true) + .classed("searchResultA", false) + .attr("r", radius + offset); + } + halo = roundHalo; + } + } + if ( node.property && !inverse ) { + if ( !node.property().getHalos() ) return; // something went wrong before + rectHalo = node.property().getHalos().select("rect"); + rectHalo.classed("hidden", true); + + roundHalo = node.property().getHalos().select("circle"); + if ( roundHalo.node() === null ) { + radius = node.property().width(); + + roundHalo = node.property().getHalos().append("circle") + .classed("searchResultB", true) + .classed("searchResultA", false) + .attr("r", radius + 15); + + } + halo = roundHalo; // swap the halo to be round + nodeIsRect = true; + container = node.property(); + } + + if ( x < 0 || x > w || y < 0 || y > h ) { + // node outside viewport; + // check for quadrant and get the correct boarder point (intersection with viewport) + if ( x < 0 && y < 0 ) { + borderPoint_x = 0; + borderPoint_y = 0; + } else if ( x > 0 && x < w && y < 0 ) { + borderPoint_x = x; + borderPoint_y = 0; + } else if ( x > w && y < 0 ) { + borderPoint_x = w; + borderPoint_y = 0; + } else if ( x > w && y > 0 && y < h ) { + borderPoint_x = w; + borderPoint_y = y; + } else if ( x > w && y > h ) { + borderPoint_x = w; + borderPoint_y = h; + } else if ( x > 0 && x < w && y > h ) { + borderPoint_x = x; + borderPoint_y = h; + } else if ( x < 0 && y > h ) { + borderPoint_x = 0; + borderPoint_y = h; + } else if ( x < 0 && y > 0 && y < h ) { + borderPoint_x = 0; + borderPoint_y = y; + } + // kill all pulses of nodes that are outside the viewport + container.getHalos().select("rect").classed("searchResultA", false); + container.getHalos().select("circle").classed("searchResultA", false); + container.getHalos().select("rect").classed("searchResultB", true); + container.getHalos().select("circle").classed("searchResultB", true); + halo.classed("hidden", false); + // compute in pixel coordinates length of difference vector + var borderRadius_x = borderPoint_x - x; + var borderRadius_y = borderPoint_y - y; + + var len = borderRadius_x * borderRadius_x + borderRadius_y * borderRadius_y; + len = Math.sqrt(len); + + var normedX = borderRadius_x / len; + var normedY = borderRadius_y / len; + + len = len + 20; // add 20 px; + + // re-normalized vector + var newVectorX = normedX * len + x; + var newVectorY = normedY * len + y; + // compute world coordinates of this point + var wX = (newVectorX - graphTranslation[0]) / zoomFactor; + var wY = (newVectorY - graphTranslation[1]) / zoomFactor; + + // compute distance in world coordinates + var dx = wX - node.x; + var dy = wY - node.y; + if ( highlightOfInv === true ) + dy = wY - node.y - 20; + + if ( highlightOfInv === false && node.property && node.property().inverse() ) + dy = wY - node.y + 20; + + var newRadius = Math.sqrt(dx * dx + dy * dy); + halo = container.getHalos().select("circle"); + // sanity checks and setting new halo radius + if ( !nodeIsRect ) { + defaultRadius = node.actualRadius() + offset; + if ( newRadius < defaultRadius ) { + newRadius = defaultRadius; + } + halo.attr("r", newRadius); + } else { + defaultRadius = 0.5 * container.width(); + if ( newRadius < defaultRadius ) + newRadius = defaultRadius; + halo.attr("r", newRadius); + } + } else { // node is in viewport , render original; + // reset the halo to original radius + defaultRadius = node.actualRadius() + 15; + if ( !nodeIsRect ) { + halo.attr("r", defaultRadius); + } else { // this is rectangular node render as such + halo = container.getHalos().select("rect"); + halo.classed("hidden", false); + //halo.classed("searchResultB", true); + //halo.classed("searchResultA", false); + var aCircHalo = container.getHalos().select("circle"); + aCircHalo.classed("hidden", true); + + container.getHalos().select("rect").classed("hidden", false); + container.getHalos().select("circle").classed("hidden", true); + } + } + } + + function transform( p, cx, cy ){ + // one iteration step for the locate target animation + zoomFactor = graph.options().height() / p[2]; + graphTranslation = [(cx - p[0] * zoomFactor), (cy - p[1] * zoomFactor)]; + updateHaloRadius(); + // update the values in case the user wants to break the animation + zoom.translate(graphTranslation); + zoom.scale(zoomFactor); + graph.options().zoomSlider().updateZoomSliderValue(zoomFactor); + return "translate(" + graphTranslation[0] + "," + graphTranslation[1] + ")scale(" + zoomFactor + ")"; + } + + graph.zoomToElementInGraph = function ( element ){ + targetLocationZoom(element); + }; + graph.updateHaloRadius = function ( element ){ + computeDistanceToCenter(element); + }; + + function targetLocationZoom( target ){ + // store the original information + var cx = 0.5 * graph.options().width(); + var cy = 0.5 * graph.options().height(); + var cp = getWorldPosFromScreen(cx, cy, graphTranslation, zoomFactor); + var sP = [cp.x, cp.y, graph.options().height() / zoomFactor]; + + var zoomLevel = Math.max(defaultZoom + 0.5 * defaultZoom, defaultTargetZoom); + var eP = [target.x, target.y, graph.options().height() / zoomLevel]; + var pos_intp = d3.interpolateZoom(sP, eP); + + var lenAnimation = pos_intp.duration; + if ( lenAnimation > 2500 ) { + lenAnimation = 2500; + } + + graphContainer.attr("transform", transform(sP, cx, cy)) + .transition() + .duration(lenAnimation) + .attrTween("transform", function (){ + return function ( t ){ + return transform(pos_intp(t), cx, cy); + }; + }) + .each("end", function (){ + graphContainer.attr("transform", "translate(" + graphTranslation + ")scale(" + zoomFactor + ")"); + zoom.translate(graphTranslation); + zoom.scale(zoomFactor); + updateHaloRadius(); + }); + } + + function getWorldPosFromScreen( x, y, translate, scale ){ + var temp = scale[0], xn, yn; + if ( temp ) { + xn = (x - translate[0]) / temp; + yn = (y - translate[1]) / temp; + } else { + xn = (x - translate[0]) / scale; + yn = (y - translate[1]) / scale; + } + return { x: xn, y: yn }; + } + + graph.locateSearchResult = function (){ + if ( pulseNodeIds && pulseNodeIds.length > 0 ) { + // move the center of the viewport to this location + if ( transformAnimation === true ) return; // << prevents incrementing the location id if we are in an animation + var node = force.nodes()[pulseNodeIds[locationId]]; + locationId++; + locationId = locationId % pulseNodeIds.length; + if ( node.id ) node.foreground(); + if ( node.property ) node.property().foreground(); + + targetLocationZoom(node); + } + }; + + graph.resetSearchHighlight = function (){ + // get all nodes (handle also already filtered nodes ) + pulseNodeIds = []; + nodeArrayForPulse = []; + // clear from stored nodes + var nodes = unfilteredData.nodes; + var props = unfilteredData.properties; + var j; + for ( j = 0; j < nodes.length; j++ ) { + var node = nodes[j]; + if ( node.removeHalo ) + node.removeHalo(); + } + for ( j = 0; j < props.length; j++ ) { + var prop = props[j]; + if ( prop.removeHalo ) + prop.removeHalo(); + } + }; + + graph.updatePulseIds = function ( nodeIdArray ){ + pulseNodeIds = []; + for ( var i = 0; i < nodeIdArray.length; i++ ) { + var selectedId = nodeIdArray[i]; + var forceId = nodeMap[selectedId]; + if ( forceId !== undefined ) { + var le_node = force.nodes()[forceId]; + if ( le_node.id ) { + if ( pulseNodeIds.indexOf(forceId) === -1 ) { + pulseNodeIds.push(forceId); + } + } + if ( le_node.property ) { + if ( pulseNodeIds.indexOf(forceId) === -1 ) { + pulseNodeIds.push(forceId); + } + } + } + } + locationId = 0; + if ( pulseNodeIds.length > 0 ) { + d3.select("#locateSearchResult").classed("highlighted", true); + d3.select("#locateSearchResult").node().title = "Locate search term"; + } + else { + d3.select("#locateSearchResult").classed("highlighted", false); + d3.select("#locateSearchResult").node().title = "Nothing to locate"; + } + + }; + + graph.highLightNodes = function ( nodeIdArray ){ + if ( nodeIdArray.length === 0 ) { + return; // nothing to highlight + } + pulseNodeIds = []; + nodeArrayForPulse = nodeIdArray; + var missedIds = []; + + // identify the force id to highlight + for ( var i = 0; i < nodeIdArray.length; i++ ) { + var selectedId = nodeIdArray[i]; + var forceId = nodeMap[selectedId]; + if ( forceId !== undefined ) { + var le_node = force.nodes()[forceId]; + if ( le_node.id ) { + if ( pulseNodeIds.indexOf(forceId) === -1 ) { + pulseNodeIds.push(forceId); + le_node.foreground(); + le_node.drawHalo(); + } + } + if ( le_node.property ) { + if ( pulseNodeIds.indexOf(forceId) === -1 ) { + pulseNodeIds.push(forceId); + le_node.property().foreground(); + le_node.property().drawHalo(); + } + } + } + else { + missedIds.push(selectedId); + } + } + + if ( missedIds.length === nodeIdArray.length ) { + + } + // store the highlight on the missed nodes; + var s_nodes = unfilteredData.nodes; + var s_props = unfilteredData.properties; + for ( i = 0; i < missedIds.length; i++ ) { + var missedId = missedIds[i]; + // search for this in the nodes; + for ( var n = 0; n < s_nodes.length; n++ ) { + var nodeId = s_nodes[n].id(); + if ( nodeId === missedId ) { + s_nodes[n].drawHalo(); + } + } + for ( var p = 0; p < s_props.length; p++ ) { + var propId = s_props[p].id(); + if ( propId === missedId ) { + s_props[p].drawHalo(); + } + } + } + if ( missedIds.length === nodeIdArray.length ) { + d3.select("#locateSearchResult").classed("highlighted", false); + } + else { + d3.select("#locateSearchResult").classed("highlighted", true); + } + locationId = 0; + updateHaloRadius(); + }; + + graph.hideHalos = function (){ + var haloElements = d3.selectAll(".searchResultA,.searchResultB"); + haloElements.classed("hidden", true); + return haloElements; + }; + + function nodeInViewport( node, property ){ + + var w = graph.options().width(); + var h = graph.options().height(); + var posXY = getScreenCoords(node.x, node.y, graphTranslation, zoomFactor); + var x = posXY.x; + var y = posXY.y; + + var retVal = !(x < 0 || x > w || y < 0 || y > h); + return retVal; + } + + graph.getBoundingBoxForTex = function (){ + var halos = graph.hideHalos(); + var bbox = graphContainer.node().getBoundingClientRect(); + halos.classed("hidden", false); + var w = graph.options().width(); + var h = graph.options().height(); + + // get the graph coordinates + var topLeft = getWorldPosFromScreen(0, 0, graphTranslation, zoomFactor); + var botRight = getWorldPosFromScreen(w, h, graphTranslation, zoomFactor); + + + var t_topLeft = getWorldPosFromScreen(bbox.left, bbox.top, graphTranslation, zoomFactor); + var t_botRight = getWorldPosFromScreen(bbox.right, bbox.bottom, graphTranslation, zoomFactor); + + // tighten up the bounding box; + + var tX = Math.max(t_topLeft.x, topLeft.x); + var tY = Math.max(t_topLeft.y, topLeft.y); + + var bX = Math.min(t_botRight.x, botRight.x); + var bY = Math.min(t_botRight.y, botRight.y); + + + // tighten further; + var allForceNodes = force.nodes(); + var numNodes = allForceNodes.length; + var visibleNodes = []; + var bbx; + + + var contentBBox = { tx: 1000000000000, ty: 1000000000000, bx: -1000000000000, by: -1000000000000 }; + + for ( var i = 0; i < numNodes; i++ ) { + var node = allForceNodes[i]; + if ( node ) { + if ( node.property ) { + if ( nodeInViewport(node, true) ) { + if ( node.property().labelElement() === undefined ) continue; + bbx = node.property().labelElement().node().getBoundingClientRect(); + if ( bbx ) { + contentBBox.tx = Math.min(contentBBox.tx, bbx.left); + contentBBox.bx = Math.max(contentBBox.bx, bbx.right); + contentBBox.ty = Math.min(contentBBox.ty, bbx.top); + contentBBox.by = Math.max(contentBBox.by, bbx.bottom); + } + } + } else { + if ( nodeInViewport(node, false) ) { + bbx = node.nodeElement().node().getBoundingClientRect(); + if ( bbx ) { + contentBBox.tx = Math.min(contentBBox.tx, bbx.left); + contentBBox.bx = Math.max(contentBBox.bx, bbx.right); + contentBBox.ty = Math.min(contentBBox.ty, bbx.top); + contentBBox.by = Math.max(contentBBox.by, bbx.bottom); + } + } + } + } + } + + var tt_topLeft = getWorldPosFromScreen(contentBBox.tx, contentBBox.ty, graphTranslation, zoomFactor); + var tt_botRight = getWorldPosFromScreen(contentBBox.bx, contentBBox.by, graphTranslation, zoomFactor); + + tX = Math.max(tX, tt_topLeft.x); + tY = Math.max(tY, tt_topLeft.y); + + bX = Math.min(bX, tt_botRight.x); + bY = Math.min(bY, tt_botRight.y); + // y axis flip for tex + return [tX, -tY, bX, -bY]; + + }; + + var updateTargetElement = function (){ + var bbox = graphContainer.node().getBoundingClientRect(); + + + // get the graph coordinates + var bboxOffset = 50; // default radius of a node; + var topLeft = getWorldPosFromScreen(bbox.left, bbox.top, graphTranslation, zoomFactor); + var botRight = getWorldPosFromScreen(bbox.right, bbox.bottom, graphTranslation, zoomFactor); + + var w = graph.options().width(); + if ( graph.options().leftSidebar().isSidebarVisible() === true ) + w -= 200; + var h = graph.options().height(); + topLeft.x += bboxOffset; + topLeft.y -= bboxOffset; + botRight.x -= bboxOffset; + botRight.y += bboxOffset; + + var g_w = botRight.x - topLeft.x; + var g_h = botRight.y - topLeft.y; + + // endpoint position calculations + var posX = 0.5 * (topLeft.x + botRight.x); + var posY = 0.5 * (topLeft.y + botRight.y); + var cx = 0.5 * w, + cy = 0.5 * h; + + if ( graph.options().leftSidebar().isSidebarVisible() === true ) + cx += 200; + var cp = getWorldPosFromScreen(cx, cy, graphTranslation, zoomFactor); + + // zoom factor calculations and fail safes; + var newZoomFactor = 1.0; // fail save if graph and window are squares + //get the smaller one + var a = w / g_w; + var b = h / g_h; + if ( a < b ) newZoomFactor = a; + else newZoomFactor = b; + + + // fail saves + if ( newZoomFactor > zoom.scaleExtent()[1] ) { + newZoomFactor = zoom.scaleExtent()[1]; + } + if ( newZoomFactor < zoom.scaleExtent()[0] ) { + newZoomFactor = zoom.scaleExtent()[0]; + } + + // apply Zooming + var sP = [cp.x, cp.y, h / zoomFactor]; + var eP = [posX, posY, h / newZoomFactor]; + + + var pos_intp = d3.interpolateZoom(sP, eP); + return [pos_intp, cx, cy]; + + }; + + graph.forceRelocationEvent = function ( dynamic ){ + // we need to kill the halo to determine the bounding box; + var halos = graph.hideHalos(); + var bbox = graphContainer.node().getBoundingClientRect(); + halos.classed("hidden", false); + + // get the graph coordinates + var bboxOffset = 50; // default radius of a node; + var topLeft = getWorldPosFromScreen(bbox.left, bbox.top, graphTranslation, zoomFactor); + var botRight = getWorldPosFromScreen(bbox.right, bbox.bottom, graphTranslation, zoomFactor); + + var w = graph.options().width(); + if ( graph.options().leftSidebar().isSidebarVisible() === true ) + w -= 200; + var h = graph.options().height(); + topLeft.x += bboxOffset; + topLeft.y -= bboxOffset; + botRight.x -= bboxOffset; + botRight.y += bboxOffset; + + var g_w = botRight.x - topLeft.x; + var g_h = botRight.y - topLeft.y; + + // endpoint position calculations + var posX = 0.5 * (topLeft.x + botRight.x); + var posY = 0.5 * (topLeft.y + botRight.y); + var cx = 0.5 * w, + cy = 0.5 * h; + + if ( graph.options().leftSidebar().isSidebarVisible() === true ) + cx += 200; + var cp = getWorldPosFromScreen(cx, cy, graphTranslation, zoomFactor); + + // zoom factor calculations and fail safes; + var newZoomFactor = 1.0; // fail save if graph and window are squares + //get the smaller one + var a = w / g_w; + var b = h / g_h; + if ( a < b ) newZoomFactor = a; + else newZoomFactor = b; + + + // fail saves + if ( newZoomFactor > zoom.scaleExtent()[1] ) { + newZoomFactor = zoom.scaleExtent()[1]; + } + if ( newZoomFactor < zoom.scaleExtent()[0] ) { + newZoomFactor = zoom.scaleExtent()[0]; + } + + // apply Zooming + var sP = [cp.x, cp.y, h / zoomFactor]; + var eP = [posX, posY, h / newZoomFactor]; + + + var pos_intp = d3.interpolateZoom(sP, eP); + var lenAnimation = pos_intp.duration; + if ( lenAnimation > 2500 ) { + lenAnimation = 2500; + } + graphContainer.attr("transform", transform(sP, cx, cy)) + .transition() + .duration(lenAnimation) + .attrTween("transform", function (){ + return function ( t ){ + if ( dynamic ) { + var param = updateTargetElement(); + var nV = param[0](t); + return transform(nV, cx, cy); + } + return transform(pos_intp(t), cx, cy); + }; + }) + .each("end", function (){ + if ( dynamic ) { + return; + } + + graphContainer.attr("transform", "translate(" + graphTranslation + ")scale(" + zoomFactor + ")"); + zoom.translate(graphTranslation); + zoom.scale(zoomFactor); + graph.options().zoomSlider().updateZoomSliderValue(zoomFactor); + + + }); + }; + + + graph.isADraggerActive = function (){ + if ( classDragger.mouseButtonPressed === true || + domainDragger.mouseButtonPressed === true || + rangeDragger.mouseButtonPressed === true ) { + return true; + } + return false; + }; + + /** --------------------------------------------------------- **/ + /** -- VOWL EDITOR create/ edit /delete functions -- **/ + /** --------------------------------------------------------- **/ + + graph.changeNodeType = function ( element ){ + + var typeString = d3.select("#typeEditor").node().value; + + if ( graph.classesSanityCheck(element, typeString) === false ) { + // call reselection to restore previous type selection + graph.options().editSidebar().updateSelectionInformation(element); + return; + } + + var prototype = NodePrototypeMap.get(typeString.toLowerCase()); + var aNode = new prototype(graph); + + aNode.x = element.x; + aNode.y = element.y; + aNode.px = element.x; + aNode.py = element.y; + aNode.id(element.id()); + aNode.copyInformation(element); + + if ( typeString === "owl:Thing" ) { + aNode.label("Thing"); + } + else if ( elementTools.isDatatype(element) === false ) { + if ( element.backupLabel() !== undefined ) { + aNode.label(element.backupLabel()); + } else if ( aNode.backupLabel() !== undefined ) { + aNode.label(aNode.backupLabel()); + } else { + aNode.label("NewClass"); + } + } + + if ( typeString === "rdfs:Datatype" ) { + if ( aNode.dType() === "undefined" ) + aNode.label("undefined"); + else { + var identifier = aNode.dType().split(":")[1]; + aNode.label(identifier); + } + } + var i; + // updates the property domain and range + for ( i = 0; i < unfilteredData.properties.length; i++ ) { + if ( unfilteredData.properties[i].domain() === element ) { + // unfilteredData.properties[i].toString(); + unfilteredData.properties[i].domain(aNode); + } + if ( unfilteredData.properties[i].range() === element ) { + unfilteredData.properties[i].range(aNode); + // unfilteredData.properties[i].toString(); + } + } + + // update for fastUpdate: + for ( i = 0; i < properties.length; i++ ) { + if ( properties[i].domain() === element ) { + // unfilteredData.properties[i].toString(); + properties[i].domain(aNode); + } + if ( properties[i].range() === element ) { + properties[i].range(aNode); + // unfilteredData.properties[i].toString(); + } + } + + var remId = unfilteredData.nodes.indexOf(element); + if ( remId !== -1 ) + unfilteredData.nodes.splice(remId, 1); + remId = classNodes.indexOf(element); + if ( remId !== -1 ) + classNodes.splice(remId, 1); + // very important thing for selection!; + addNewNodeElement(aNode); + // handle focuser! + options.focuserModule().handle(aNode); + generateDictionary(unfilteredData); + graph.getUpdateDictionary(); + element = null; + }; + + + graph.changePropertyType = function ( element ){ + var typeString = d3.select("#typeEditor").node().value; + + // create warning + if ( graph.sanityCheckProperty(element.domain(), element.range(), typeString) === false ) return false; + + var propPrototype = PropertyPrototypeMap.get(typeString.toLowerCase()); + var aProp = new propPrototype(graph); + aProp.copyInformation(element); + aProp.id(element.id()); + + element.domain().removePropertyElement(element); + element.range().removePropertyElement(element); + aProp.domain(element.domain()); + aProp.range(element.range()); + + if ( element.backupLabel() !== undefined ) { + aProp.label(element.backupLabel()); + } else { + aProp.label("newObjectProperty"); + } + + if ( aProp.type() === "rdfs:subClassOf" ) { + aProp.iri("http://www.w3.org/2000/01/rdf-schema#subClassOf"); + } else { + if ( element.iri() === "http://www.w3.org/2000/01/rdf-schema#subClassOf" ) + aProp.iri(graph.options().getGeneralMetaObjectProperty('iri') + aProp.id()); + + } + + + if ( graph.propertyCheckExistenceChecker(aProp, element.domain(), element.range()) === false ) { + graph.options().editSidebar().updateSelectionInformation(element); + return; + } + // // TODO: change its base IRI to proper value + // var ontoIRI="http://someTest.de"; + // aProp.baseIri(ontoIRI); + // aProp.iri(aProp.baseIri()+aProp.id()); + + + // add this to the data; + unfilteredData.properties.push(aProp); + if ( properties.indexOf(aProp) === -1 ) + properties.push(aProp); + var remId = unfilteredData.properties.indexOf(element); + if ( remId !== -1 ) + unfilteredData.properties.splice(remId, 1); + if ( properties.indexOf(aProp) === -1 ) + properties.push(aProp); + remId = properties.indexOf(element); + if ( remId !== -1 ) + properties.splice(remId, 1); + graph.fastUpdate(); + aProp.domain().addProperty(aProp); + aProp.range().addProperty(aProp); + if ( element.labelObject() && aProp.labelObject() ) { + aProp.labelObject().x = element.labelObject().x; + aProp.labelObject().px = element.labelObject().px; + aProp.labelObject().y = element.labelObject().y; + aProp.labelObject().py = element.labelObject().py; + } + + options.focuserModule().handle(aProp); + element = null; + }; + + graph.removeEditElements = function (){ + // just added to be called form outside + removeEditElements(); + }; + + function removeEditElements(){ + rangeDragger.hideDragger(true); + domainDragger.hideDragger(true); + shadowClone.hideClone(true); + + classDragger.hideDragger(true); + if ( addDataPropertyGroupElement ) + addDataPropertyGroupElement.classed("hidden", true); + if ( deleteGroupElement ) + deleteGroupElement.classed("hidden", true); + + + if ( hoveredNodeElement ) { + if ( hoveredNodeElement.pinned() === false ) { + hoveredNodeElement.locked(graph.paused()); + hoveredNodeElement.frozen(graph.paused()); + } + } + if ( hoveredPropertyElement ) { + if ( hoveredPropertyElement.pinned() === false ) { + hoveredPropertyElement.locked(graph.paused()); + hoveredPropertyElement.frozen(graph.paused()); + } + } + + + } + + graph.editorMode = function ( val ){ + var create_entry = d3.select("#empty"); + var create_container = d3.select("#emptyContainer"); + + var modeOfOpString = d3.select("#modeOfOperationString").node(); + if ( !arguments.length ) { + create_entry.node().checked = editMode; + if ( editMode === false ) { + create_container.node().title = "Enable editing in modes menu to create a new ontology"; + create_entry.node().title = "Enable editing in modes menu to create a new ontology"; + create_entry.style("pointer-events", "none"); + } else { + create_container.node().title = "Creates a new empty ontology"; + create_entry.node().title = "Creates a new empty ontology"; + d3.select("#useAccuracyHelper").style("color", "#2980b9"); + d3.select("#useAccuracyHelper").style("pointer-events", "auto"); + create_entry.node().disabled = false; + create_entry.style("pointer-events", "auto"); + } + + return editMode; + } + graph.options().setEditorModeForDefaultObject(val); + + // if (seenEditorHint===false && val===true){ + // seenEditorHint=true; + // graph.options().warningModule().showEditorHint(); + // } + editMode = val; + + if ( create_entry ) { + create_entry.classed("disabled", !editMode); + if ( !editMode ) { + create_container.node().title = "Enable editing in modes menu to create a new ontology"; + create_entry.node().title = "Enable editing in modes menu to create a new ontology"; + create_entry.node().disabled = true; + d3.select("#useAccuracyHelper").style("color", "#979797"); + d3.select("#useAccuracyHelper").style("pointer-events", "none"); + create_entry.style("pointer-events", "none"); + } else { + create_container.node().title = "Creates a new empty ontology"; + create_entry.node().title = "Creates a new empty ontology"; + d3.select("#useAccuracyHelper").style("color", "#2980b9"); + d3.select("#useAccuracyHelper").style("pointer-events", "auto"); + create_entry.style("pointer-events", "auto"); + } + } + + // adjust compact notation + // selector = compactNotationOption; + // box =ModuleCheckbox + var compactNotationContainer = d3.select("#compactnotationModuleCheckbox"); + if ( compactNotationContainer ) { + compactNotationContainer.classed("disabled", !editMode); + if ( !editMode ) { + compactNotationContainer.node().title = ""; + compactNotationContainer.node().disabled = false; + compactNotationContainer.style("pointer-events", "auto"); + d3.select("#compactNotationOption").style("color", ""); + d3.select("#compactNotationOption").node().title = ""; + options.literalFilter().enabled(true); + graph.update(); + } else { + // if editor Mode + //1) uncheck the element + d3.select("#compactNotationOption").node().title = "Compact notation can only be used in view mode"; + compactNotationContainer.node().disabled = true; + compactNotationContainer.node().checked = false; + options.compactNotationModule().enabled(false); + options.literalFilter().enabled(false); + graph.executeCompactNotationModule(); + graph.executeEmptyLiteralFilter(); + graph.lazyRefresh(); + compactNotationContainer.style("pointer-events", "none"); + d3.select("#compactNotationOption").style("color", "#979797"); + } + } + + if ( modeOfOpString ) { + if ( touchDevice === true ) { + modeOfOpString.innerHTML = "touch able device detected"; + } else { + modeOfOpString.innerHTML = "point & click device detected"; + } + } + var svgGraph = d3.selectAll(".vowlGraph"); + + if ( editMode === true ) { + options.leftSidebar().showSidebar(options.leftSidebar().getSidebarVisibility(), true); + options.leftSidebar().hideCollapseButton(false); + graph.options().editSidebar().updatePrefixUi(); + graph.options().editSidebar().updateElementWidth(); + svgGraph.on("dblclick.zoom", graph.modified_dblClickFunction); + + } else { + svgGraph.on("dblclick.zoom", originalD3_dblClickFunction); + options.leftSidebar().showSidebar(0); + options.leftSidebar().hideCollapseButton(true); + // hide hovered edit elements + removeEditElements(); + } + options.sidebar().updateShowedInformation(); + options.editSidebar().updateElementWidth(); + + }; + + function createLowerCasePrototypeMap( prototypeMap ){ + return d3.map(prototypeMap.values(), function ( Prototype ){ + return new Prototype().type().toLowerCase(); + }); + } + + function createNewNodeAtPosition( pos ){ + var aNode, prototype; + var forceUpdate = true; + // create a node of that id; + + var typeToCreate = d3.select("#defaultClass").node().title; + prototype = NodePrototypeMap.get(typeToCreate.toLowerCase()); + aNode = new prototype(graph); + var autoEditElement = false; + if ( typeToCreate === "owl:Thing" ) { + aNode.label("Thing"); + } + else { + aNode.label("NewClass"); + autoEditElement = true; + } + aNode.x = pos.x; + aNode.y = pos.y; + aNode.px = aNode.x; + aNode.py = aNode.y; + aNode.id("Class" + eN++); + // aNode.paused(true); + + aNode.baseIri(d3.select("#iriEditor").node().value); + aNode.iri(aNode.baseIri() + aNode.id()); + addNewNodeElement(aNode, forceUpdate); + options.focuserModule().handle(aNode, true); + aNode.frozen(graph.paused()); + aNode.locked(graph.paused()); + aNode.enableEditing(autoEditElement); + } + + + function addNewNodeElement( element ){ + unfilteredData.nodes.push(element); + if ( classNodes.indexOf(element) === -1 ) + classNodes.push(element); + + generateDictionary(unfilteredData); + graph.getUpdateDictionary(); + graph.fastUpdate(); + } + + graph.getTargetNode = function ( position ){ + var dx = position[0]; + var dy = position[1]; + var tN = null; + var minDist = 1000000000000; + // This is a bit OVERKILL for the computation of one node >> TODO: KD-TREE SEARCH + unfilteredData.nodes.forEach(function ( el ){ + var cDist = Math.sqrt((el.x - dx) * (el.x - dx) + (el.y - dy) * (el.y - dy)); + if ( cDist < minDist ) { + minDist = cDist; + tN = el; + } + }); + if ( hoveredNodeElement ) { + var offsetDist = hoveredNodeElement.actualRadius() + 30; + if ( minDist > offsetDist ) return null; + if ( tN.renderType() === "rect" ) return null; + if ( tN === hoveredNodeElement && minDist <= hoveredNodeElement.actualRadius() ) { + return tN; + } else if ( tN === hoveredNodeElement && minDist > hoveredNodeElement.actualRadius() ) { + return null; + } + return tN; + } + else { + + if ( minDist > (tN.actualRadius() + 30) ) + return null; + else return tN; + + } + }; + + graph.genericPropertySanityCheck = function ( domain, range, typeString, header, action ){ + if ( domain === range && typeString === "rdfs:subClassOf" ) { + graph.options().warningModule().showWarning(header, + "rdfs:subClassOf can not be created as loops (domain == range)", + action, 1, false); + return false; + } + if ( domain === range && typeString === "owl:disjointWith" ) { + graph.options().warningModule().showWarning(header, + "owl:disjointWith can not be created as loops (domain == range)", + action, 1, false); + return false; + } + // allProps[i].type()==="owl:allValuesFrom" || + // allProps[i].type()==="owl:someValuesFrom" + if ( domain.type() === "owl:Thing" && typeString === "owl:allValuesFrom" ) { + graph.options().warningModule().showWarning(header, + "owl:allValuesFrom can not originate from owl:Thing", + action, 1, false); + return false; + } + if ( domain.type() === "owl:Thing" && typeString === "owl:someValuesFrom" ) { + graph.options().warningModule().showWarning(header, + "owl:someValuesFrom can not originate from owl:Thing", + action, 1, false); + return false; + } + + if ( range.type() === "owl:Thing" && typeString === "owl:allValuesFrom" ) { + graph.options().warningModule().showWarning(header, + "owl:allValuesFrom can not be connected to owl:Thing", + action, 1, false); + return false; + } + if ( range.type() === "owl:Thing" && typeString === "owl:someValuesFrom" ) { + graph.options().warningModule().showWarning(header, + "owl:someValuesFrom can not be connected to owl:Thing", + action, 1, false); + return false; + } + + return true; // we can Change the domain or range + }; + + graph.checkIfIriClassAlreadyExist = function ( url ){ + // search for a class node with this url + var allNodes = unfilteredData.nodes; + for ( var i = 0; i < allNodes.length; i++ ) { + if ( elementTools.isDatatype(allNodes[i]) === true || allNodes[i].type() === "owl:Thing" ) + continue; + + // now we are a real class; + //get class IRI + var classIRI = allNodes[i].iri(); + + // this gives me the node for halo + if ( url === classIRI ) { + return allNodes[i]; + } + } + return false; + }; + + graph.classesSanityCheck = function ( classElement, targetType ){ + // this is added due to someValuesFrom properties + // we should not be able to change a classElement to a owl:Thing + // when it has a property attached to it that uses these restrictions + // + + if ( targetType === "owl:Class" ) return true; + + else { + // collect all properties which have that one as a domain or range + var allProps = unfilteredData.properties; + for ( var i = 0; i < allProps.length; i++ ) { + if ( allProps[i].range() === classElement || allProps[i].domain() === classElement ) { + // check for the type of that property + if ( allProps[i].type() === "owl:someValuesFrom" ) { + graph.options().warningModule().showWarning("Can not change class type", + "The element has a property that is of type owl:someValuesFrom", + "Element type not changed!", 1, true); + return false; + } + if ( allProps[i].type() === "owl:allValuesFrom" ) { + graph.options().warningModule().showWarning("Can not change class type", + "The element has a property that is of type owl:allValuesFrom", + "Element type not changed!", 1, true); + return false; + } + } + } + + + } + return true; + }; + + graph.propertyCheckExistenceChecker = function ( property, domain, range ){ + var allProps = unfilteredData.properties; + var i; + if ( property.type() === "rdfs:subClassOf" || property.type() === "owl:disjointWith" ) { + + for ( i = 0; i < allProps.length; i++ ) { + if ( allProps[i] === property ) continue; + if ( allProps[i].domain() === domain && allProps[i].range() === range && allProps[i].type() === property.type() ) { + graph.options().warningModule().showWarning("Warning", + "This triple already exist!", + "Element not created!", 1, false); + return false; + } + if ( allProps[i].domain() === range && allProps[i].range() === domain && allProps[i].type() === property.type() ) { + graph.options().warningModule().showWarning("Warning", + "Inverse assignment already exist! ", + "Element not created!", 1, false); + return false; + } + } + return true; + } + return true; + }; + + // graph.checkForTripleDuplicate=function(property){ + // var domain=property.domain(); + // var range=property.range(); + // console.log("checking for duplicates"); + // var b1= domain.isPropertyAssignedToThisElement(property); + // var b2= range.isPropertyAssignedToThisElement(property); + // + // console.log("test domain results in "+ b1); + // console.log("test range results in "+ b1); + // + // if (b1 && b2 ){ + // graph.options().warningModule().showWarning("Warning", + // "This triple already exist!", + // "Element not created!",1,false); + // return false; + // } + // return true; + // }; + + graph.sanityCheckProperty = function ( domain, range, typeString ){ + + // check for duplicate triple in the element; + + + if ( typeString === "owl:objectProperty" && graph.options().objectPropertyFilter().enabled() === true ) { + graph.options().warningModule().showWarning("Warning", + "Object properties are filtered out in the visualization!", + "Element not created!", 1, false); + return false; + } + + if ( typeString === "owl:disjointWith" && graph.options().disjointPropertyFilter().enabled() === true ) { + graph.options().warningModule().showWarning("Warning", + "owl:disjointWith properties are filtered out in the visualization!", + "Element not created!", 1, false); + return false; + } + + + if ( domain === range && typeString === "rdfs:subClassOf" ) { + graph.options().warningModule().showWarning("Warning", + "rdfs:subClassOf can not be created as loops (domain == range)", + "Element not created!", 1, false); + return false; + } + if ( domain === range && typeString === "owl:disjointWith" ) { + graph.options().warningModule().showWarning("Warning", + "owl:disjointWith can not be created as loops (domain == range)", + "Element not created!", 1, false); + return false; + } + + if ( domain.type() === "owl:Thing" && typeString === "owl:someValuesFrom" ) { + graph.options().warningModule().showWarning("Warning", + "owl:someValuesFrom can not originate from owl:Thing", + "Element not created!", 1, false); + return false; + } + if ( domain.type() === "owl:Thing" && typeString === "owl:allValuesFrom" ) { + graph.options().warningModule().showWarning("Warning", + "owl:allValuesFrom can not originate from owl:Thing", + "Element not created!", 1, false); + return false; + } + + if ( range.type() === "owl:Thing" && typeString === "owl:allValuesFrom" ) { + graph.options().warningModule().showWarning("Warning", + "owl:allValuesFrom can not be connected to owl:Thing", + "Element not created!", 1, false); + return false; + } + if ( range.type() === "owl:Thing" && typeString === "owl:someValuesFrom" ) { + graph.options().warningModule().showWarning("Warning", + "owl:someValuesFrom can not be connected to owl:Thing", + "Element not created!", 1, false); + return false; + } + return true; // we can create a property + }; + + function createNewObjectProperty( domain, range, draggerEndposition ){ + // check type of the property that we want to create; + + var defaultPropertyName = d3.select("#defaultProperty").node().title; + + // check if we are allow to create that property + if ( graph.sanityCheckProperty(domain, range, defaultPropertyName) === false ) return false; + + + var propPrototype = PropertyPrototypeMap.get(defaultPropertyName.toLowerCase()); + var aProp = new propPrototype(graph); + aProp.id("objectProperty" + eP++); + aProp.domain(domain); + aProp.range(range); + aProp.label("newObjectProperty"); + aProp.baseIri(d3.select("#iriEditor").node().value); + aProp.iri(aProp.baseIri() + aProp.id()); + + // check for duplicate; + if ( graph.propertyCheckExistenceChecker(aProp, domain, range) === false ) { + // delete aProp; + // hope for garbage collection here -.- + return false; + } + + var autoEditElement = false; + + if ( defaultPropertyName === "owl:objectProperty" ) { + autoEditElement = true; + } + var pX = 0.49 * (domain.x + range.x); + var pY = 0.49 * (domain.y + range.y); + + if ( domain === range ) { + // we use the dragger endposition to determine an angle to put the loop there; + var dirD_x = draggerEndposition[0] - domain.x; + var dirD_y = draggerEndposition[1] - domain.y; + + // normalize; + var len = Math.sqrt(dirD_x * dirD_x + dirD_y * dirD_y); + // it should be very hard to set the position on the same sport but why not handling this + var nx = dirD_x / len; + var ny = dirD_y / len; + // is Nan in javascript like in c len==len returns false when it is not a number? + if ( isNaN(len) ) { + nx = 0; + ny = -1; + } + + // get domain actual raidus + var offset = 2 * domain.actualRadius() + 50; + pX = domain.x + offset * nx; + pY = domain.y + offset * ny; + } + + // add this property to domain and range; + domain.addProperty(aProp); + range.addProperty(aProp); + + + // add this to the data; + unfilteredData.properties.push(aProp); + if ( properties.indexOf(aProp) === -1 ) + properties.push(aProp); + graph.fastUpdate(); + aProp.labelObject().x = pX; + aProp.labelObject().px = pX; + aProp.labelObject().y = pY; + aProp.labelObject().py = pY; + + aProp.frozen(graph.paused()); + aProp.locked(graph.paused()); + domain.frozen(graph.paused()); + domain.locked(graph.paused()); + range.frozen(graph.paused()); + range.locked(graph.paused()); + + + generateDictionary(unfilteredData); + graph.getUpdateDictionary(); + + options.focuserModule().handle(aProp); + graph.activateHoverElementsForProperties(true, aProp, false, touchDevice); + aProp.labelObject().increasedLoopAngle = true; + aProp.enableEditing(autoEditElement); + } + + graph.createDataTypeProperty = function ( node ){ + // random postion issues; + clearTimeout(nodeFreezer); + // tells user when element is filtered out + if ( graph.options().datatypeFilter().enabled() === true ) { + graph.options().warningModule().showWarning("Warning", + "Datatype properties are filtered out in the visualization!", + "Element not created!", 1, false); + return; + } + + + var aNode, prototype; + + // create a default datatype Node >> HERE LITERAL; + var defaultDatatypeName = d3.select("#defaultDatatype").node().title; + if ( defaultDatatypeName === "rdfs:Literal" ) { + prototype = NodePrototypeMap.get("rdfs:literal"); + aNode = new prototype(graph); + aNode.label("Literal"); + aNode.iri("http://www.w3.org/2000/01/rdf-schema#Literal"); + aNode.baseIri("http://www.w3.org/2000/01/rdf-schema#"); + } else { + prototype = NodePrototypeMap.get("rdfs:datatype"); + aNode = new prototype(graph); + var identifier = ""; + if ( defaultDatatypeName === "undefined" ) { + identifier = "undefined"; + + aNode.label(identifier); + // TODO : HANDLER FOR UNDEFINED DATATYPES!!<<<>>>>>>>>>>>.. + aNode.iri("http://www.undefinedDatatype.org/#" + identifier); + aNode.baseIri("http://www.undefinedDatatype.org/#"); + aNode.dType(defaultDatatypeName); + } else { + identifier = defaultDatatypeName.split(":")[1]; + aNode.label(identifier); + aNode.dType(defaultDatatypeName); + aNode.iri("http://www.w3.org/2001/XMLSchema#" + identifier); + aNode.baseIri("http://www.w3.org/2001/XMLSchema#"); + } + } + + + var nX = node.x - node.actualRadius() - 100; + var nY = node.y + node.actualRadius() + 100; + + aNode.x = nX; + aNode.y = nY; + aNode.px = aNode.x; + aNode.py = aNode.y; + aNode.id("NodeId" + eN++); + // add this property to the nodes; + unfilteredData.nodes.push(aNode); + if ( classNodes.indexOf(aNode) === -1 ) + classNodes.push(aNode); + + + // add also the datatype Property to it + var propPrototype = PropertyPrototypeMap.get("owl:datatypeproperty"); + var aProp = new propPrototype(graph); + aProp.id("datatypeProperty" + eP++); + + // create the connection + aProp.domain(node); + aProp.range(aNode); + aProp.label("newDatatypeProperty"); + + + // TODO: change its base IRI to proper value + var ontoIri = d3.select("#iriEditor").node().value; + aProp.baseIri(ontoIri); + aProp.iri(ontoIri + aProp.id()); + // add this to the data; + unfilteredData.properties.push(aProp); + if ( properties.indexOf(aProp) === -1 ) + properties.push(aProp); + graph.fastUpdate(); + generateDictionary(unfilteredData); + graph.getUpdateDictionary(); + + nodeFreezer = setTimeout(function (){ + if ( node && node.frozen() === true && node.pinned() === false && graph.paused() === false ) { + node.frozen(graph.paused()); + node.locked(graph.paused()); + } + }, 1000); + options.focuserModule().handle(undefined); + if ( node ) { + node.frozen(true); + node.locked(true); + } + }; + + graph.removeNodesViaResponse = function ( nodesToRemove, propsToRemove ){ + var i, remId; + // splice them; + for ( i = 0; i < propsToRemove.length; i++ ) { + remId = unfilteredData.properties.indexOf(propsToRemove[i]); + if ( remId !== -1 ) + unfilteredData.properties.splice(remId, 1); + remId = properties.indexOf(propsToRemove[i]); + if ( remId !== -1 ) + properties.splice(remId, 1); + propsToRemove[i] = null; + } + for ( i = 0; i < nodesToRemove.length; i++ ) { + remId = unfilteredData.nodes.indexOf(nodesToRemove[i]); + if ( remId !== -1 ) { + unfilteredData.nodes.splice(remId, 1); + } + remId = classNodes.indexOf(nodesToRemove[i]); + if ( remId !== -1 ) + classNodes.splice(remId, 1); + nodesToRemove[i] = null; + } + graph.fastUpdate(); + generateDictionary(unfilteredData); + graph.getUpdateDictionary(); + options.focuserModule().handle(undefined); + nodesToRemove = null; + propsToRemove = null; + + }; + + graph.removeNodeViaEditor = function ( node ){ + var propsToRemove = []; + var nodesToRemove = []; + var datatypes = 0; + + var remId; + + nodesToRemove.push(node); + for ( var i = 0; i < unfilteredData.properties.length; i++ ) { + if ( unfilteredData.properties[i].domain() === node || unfilteredData.properties[i].range() === node ) { + propsToRemove.push(unfilteredData.properties[i]); + if ( unfilteredData.properties[i].type().toLocaleLowerCase() === "owl:datatypeproperty" && + unfilteredData.properties[i].range() !== node ) { + nodesToRemove.push(unfilteredData.properties[i].range()); + datatypes++; + } + } + } + var removedItems = propsToRemove.length + nodesToRemove.length; + if ( removedItems > 2 ) { + var text = "You are about to delete 1 class and " + propsToRemove.length + " properties"; + if ( datatypes !== 0 ) { + text = "You are about to delete 1 class, " + datatypes + " datatypes and " + propsToRemove.length + " properties"; + } + + + graph.options().warningModule().responseWarning( + "Removing elements", + text, + "Awaiting response!", graph.removeNodesViaResponse, [nodesToRemove, propsToRemove], false); + + + // + // if (confirm("Remove :\n"+propsToRemove.length + " properties\n"+nodesToRemove.length+" classes? ")===false){ + // return; + // }else{ + // // todo : store for undo delete button ; + // } + } else { + // splice them; + for ( i = 0; i < propsToRemove.length; i++ ) { + remId = unfilteredData.properties.indexOf(propsToRemove[i]); + if ( remId !== -1 ) + unfilteredData.properties.splice(remId, 1); + remId = properties.indexOf(propsToRemove[i]); + if ( remId !== -1 ) + properties.splice(remId, 1); + propsToRemove[i] = null; + } + for ( i = 0; i < nodesToRemove.length; i++ ) { + remId = unfilteredData.nodes.indexOf(nodesToRemove[i]); + if ( remId !== -1 ) + unfilteredData.nodes.splice(remId, 1); + remId = classNodes.indexOf(nodesToRemove[i]); + if ( remId !== -1 ) + classNodes.splice(remId, 1); + nodesToRemove[i] = null; + } + graph.fastUpdate(); + generateDictionary(unfilteredData); + graph.getUpdateDictionary(); + options.focuserModule().handle(undefined); + nodesToRemove = null; + propsToRemove = null; + } + }; + + graph.removePropertyViaEditor = function ( property ){ + property.domain().removePropertyElement(property); + property.range().removePropertyElement(property); + var remId; + + if ( property.type().toLocaleLowerCase() === "owl:datatypeproperty" ) { + var datatype = property.range(); + remId = unfilteredData.nodes.indexOf(property.range()); + if ( remId !== -1 ) + unfilteredData.nodes.splice(remId, 1); + remId = classNodes.indexOf(property.range()); + if ( remId !== -1 ) + classNodes.splice(remId, 1); + datatype = null; + } + remId = unfilteredData.properties.indexOf(property); + if ( remId !== -1 ) + unfilteredData.properties.splice(remId, 1); + remId = properties.indexOf(property); + if ( remId !== -1 ) + properties.splice(remId, 1); + if ( property.inverse() ) { + // so we have inverse + property.inverse().inverse(0); + + } + + + hoveredPropertyElement = undefined; + graph.fastUpdate(); + generateDictionary(unfilteredData); + graph.getUpdateDictionary(); + options.focuserModule().handle(undefined); + property = null; + }; + + graph.executeColorExternalsModule = function (){ + options.colorExternalsModule().filter(unfilteredData.nodes, unfilteredData.properties); + }; + + graph.executeCompactNotationModule = function (){ + if ( unfilteredData ) { + options.compactNotationModule().filter(unfilteredData.nodes, unfilteredData.properties); + } + + }; + graph.executeEmptyLiteralFilter = function (){ + + if ( unfilteredData && unfilteredData.nodes.length > 1 ) { + options.literalFilter().filter(unfilteredData.nodes, unfilteredData.properties); + unfilteredData.nodes = options.literalFilter().filteredNodes(); + unfilteredData.properties = options.literalFilter().filteredProperties(); + } + + }; + + + /** --------------------------------------------------------- **/ + /** -- animation functions for the nodes -- **/ + /** --------------------------------------------------------- **/ + + graph.animateDynamicLabelWidth = function (){ + var wantedWidth = options.dynamicLabelWidth(); + var i; + for ( i = 0; i < classNodes.length; i++ ) { + var nodeElement = classNodes[i]; + if ( elementTools.isDatatype(nodeElement) ) { + nodeElement.animateDynamicLabelWidth(wantedWidth); + } + } + for ( i = 0; i < properties.length; i++ ) { + properties[i].animateDynamicLabelWidth(wantedWidth); + } + }; + + + /** --------------------------------------------------------- **/ + /** -- Touch behaviour functions -- **/ + /** --------------------------------------------------------- **/ + + graph.setTouchDevice = function ( val ){ + touchDevice = val; + }; + + graph.isTouchDevice = function (){ + return touchDevice; + }; + + graph.modified_dblClickFunction = function (){ + + d3.event.stopPropagation(); + d3.event.preventDefault(); + // get position where we want to add the node; + var grPos = getClickedScreenCoords(d3.event.clientX, d3.event.clientY, graph.translation(), graph.scaleFactor()); + createNewNodeAtPosition(grPos); + }; + + function doubletap(){ + var touch_time = d3.event.timeStamp; + var numTouchers = 1; + if ( d3.event && d3.event.touches && d3.event.touches.length ) + numTouchers = d3.event.touches.length; + + if ( touch_time - last_touch_time < 300 && numTouchers === 1 ) { + d3.event.stopPropagation(); + if ( editMode === true ) { + //graph.modified_dblClickFunction(); + d3.event.preventDefault(); + d3.event.stopPropagation(); + last_touch_time = touch_time; + return true; + } + } + last_touch_time = touch_time; + return false; + } + + + function touchzoomed(){ + forceNotZooming = true; + + + var touch_time = d3.event.timeStamp; + if ( touch_time - last_touch_time < 300 && d3.event.touches.length === 1 ) { + d3.event.stopPropagation(); + + if ( editMode === true ) { + //graph.modified_dblClickFunction(); + d3.event.preventDefault(); + d3.event.stopPropagation(); + zoom.translate(graphTranslation); + zoom.scale(zoomFactor); + graph.modified_dblTouchFunction(); + } + else { + forceNotZooming = false; + if ( originalD3_touchZoomFunction ) + originalD3_touchZoomFunction(); + } + return; + } + forceNotZooming = false; + last_touch_time = touch_time; + // TODO: WORK AROUND TO CHECK FOR ORIGINAL FUNCTION + if ( originalD3_touchZoomFunction ) + originalD3_touchZoomFunction(); + } + + graph.modified_dblTouchFunction = function ( d ){ + d3.event.stopPropagation(); + d3.event.preventDefault(); + var xy; + if ( editMode === true ) { + xy = d3.touches(d3.selectAll(".vowlGraph").node()); + } + var grPos = getClickedScreenCoords(xy[0][0], xy[0][1], graph.translation(), graph.scaleFactor()); + createNewNodeAtPosition(grPos); + }; + + /** --------------------------------------------------------- **/ + /** -- Hover and Selection functions, adding edit elements -- **/ + /** --------------------------------------------------------- **/ + + graph.ignoreOtherHoverEvents = function ( val ){ + if ( !arguments.length ) { + return ignoreOtherHoverEvents; + } + else ignoreOtherHoverEvents = val; + }; + + function delayedHiddingHoverElements( tbh ){ + if ( tbh === true ) return; + if ( hoveredNodeElement ) { + if ( hoveredNodeElement.editingTextElement === true ) return; + delayedHider = setTimeout(function (){ + deleteGroupElement.classed("hidden", true); + addDataPropertyGroupElement.classed("hidden", true); + classDragger.hideDragger(true); + if ( hoveredNodeElement && hoveredNodeElement.pinned() === false && graph.paused() === false && hoveredNodeElement.editingTextElement === false ) { + hoveredNodeElement.frozen(false); + hoveredNodeElement.locked(false); + } + }, 1000); + } + if ( hoveredPropertyElement ) { + if ( hoveredPropertyElement.editingTextElement === true ) return; + delayedHider = setTimeout(function (){ + deleteGroupElement.classed("hidden", true); + addDataPropertyGroupElement.classed("hidden", true); + classDragger.hideDragger(true); + rangeDragger.hideDragger(true); + domainDragger.hideDragger(true); + shadowClone.hideClone(true); + if ( hoveredPropertyElement && hoveredPropertyElement.focused() === true && graph.options().drawPropertyDraggerOnHover() === true ) { + hoveredPropertyElement.labelObject().increasedLoopAngle = false; + // lazy update + recalculatePositions(); + } + + if ( hoveredPropertyElement && hoveredPropertyElement.pinned() === false && graph.paused() === false && hoveredPropertyElement.editingTextElement === false ) { + hoveredPropertyElement.frozen(false); + hoveredPropertyElement.locked(false); + } + }, 1000); + } + + } + + + // TODO : experimental code for updating dynamic label with and its hover element + graph.hideHoverPropertyElementsForAnimation = function (){ + deleteGroupElement.classed("hidden", true); + }; + graph.showHoverElementsAfterAnimation = function ( property, inversed ){ + setDeleteHoverElementPositionProperty(property, inversed); + deleteGroupElement.classed("hidden", false); + + }; + + function editElementHoverOnHidden(){ + classDragger.nodeElement.classed("classDraggerNodeHovered", true); + classDragger.nodeElement.classed("classDraggerNode", false); + editElementHoverOn(); + } + + function editElementHoverOutHidden(){ + classDragger.nodeElement.classed("classDraggerNodeHovered", false); + classDragger.nodeElement.classed("classDraggerNode", true); + editElementHoverOut(); + } + + function editElementHoverOn( touch ){ + if ( touch === true ) return; + clearTimeout(delayedHider); // ignore touch behaviour + + } + + graph.killDelayedTimer = function (){ + clearTimeout(delayedHider); + clearTimeout(nodeFreezer); + }; + + + function editElementHoverOut( tbh ){ + if ( hoveredNodeElement ) { + if ( graph.ignoreOtherHoverEvents() === true || tbh === true || hoveredNodeElement.editingTextElement === true ) return; + delayedHider = setTimeout(function (){ + if ( graph.isADraggerActive() === true ) return; + deleteGroupElement.classed("hidden", true); + addDataPropertyGroupElement.classed("hidden", true); + classDragger.hideDragger(true); + if ( hoveredNodeElement && hoveredNodeElement.pinned() === false && graph.paused() === false ) { + hoveredNodeElement.frozen(false); + hoveredNodeElement.locked(false); + } + + }, 1000); + } + if ( hoveredPropertyElement ) { + if ( graph.ignoreOtherHoverEvents() === true || tbh === true || hoveredPropertyElement.editingTextElement === true ) return; + delayedHider = setTimeout(function (){ + if ( graph.isADraggerActive() === true ) return; + deleteGroupElement.classed("hidden", true); + addDataPropertyGroupElement.classed("hidden", true); + classDragger.hideDragger(true); + if ( hoveredPropertyElement && hoveredPropertyElement.pinned() === false && graph.paused() === false ) { + hoveredPropertyElement.frozen(false); + hoveredPropertyElement.locked(false); + } + + }, 1000); + } + } + + graph.activateHoverElementsForProperties = function ( val, property, inversed, touchBehaviour ){ + if ( editMode === false ) return; // nothing to do; + + if ( touchBehaviour === undefined ) + touchBehaviour = false; + + if ( val === true ) { + clearTimeout(delayedHider); + if ( hoveredPropertyElement ) { + if ( hoveredPropertyElement.domain() === hoveredPropertyElement.range() ) { + hoveredPropertyElement.labelObject().increasedLoopAngle = false; + recalculatePositions(); + } + } + + hoveredPropertyElement = property; + if ( graph.options().drawPropertyDraggerOnHover() === true ) { + + + if ( property.type() !== "owl:DatatypeProperty" ) { + if ( property.domain() === property.range() ) { + property.labelObject().increasedLoopAngle = true; + recalculatePositions(); + } + shadowClone.setParentProperty(property, inversed); + rangeDragger.setParentProperty(property, inversed); + rangeDragger.hideDragger(false); + rangeDragger.addMouseEvents(); + domainDragger.setParentProperty(property, inversed); + domainDragger.hideDragger(false); + domainDragger.addMouseEvents(); + + + } else if ( property.type() === "owl:DatatypeProperty" ) { + shadowClone.setParentProperty(property, inversed); + rangeDragger.setParentProperty(property, inversed); + rangeDragger.hideDragger(true); + rangeDragger.addMouseEvents(); + domainDragger.setParentProperty(property, inversed); + domainDragger.hideDragger(false); + domainDragger.addMouseEvents(); + } + } + else { // hide when we dont want that option + if ( graph.options().drawPropertyDraggerOnHover() === true ) { + rangeDragger.hideDragger(true); + domainDragger.hideDragger(true); + shadowClone.hideClone(true); + if ( property.domain() === property.range() ) { + property.labelObject().increasedLoopAngle = false; + recalculatePositions(); + } + } + } + + if ( hoveredNodeElement ) { + if ( hoveredNodeElement && hoveredNodeElement.pinned() === false && graph.paused() === false ) { + hoveredNodeElement.frozen(false); + hoveredNodeElement.locked(false); + } + } + hoveredNodeElement = undefined; + deleteGroupElement.classed("hidden", false); + setDeleteHoverElementPositionProperty(property, inversed); + deleteGroupElement.selectAll("*").on("click", function (){ + if ( touchBehaviour && property.focused() === false ) { + graph.options().focuserModule().handle(property); + return; + } + graph.removePropertyViaEditor(property); + d3.event.stopPropagation(); + }); + classDragger.hideDragger(true); + addDataPropertyGroupElement.classed("hidden", true); + } else { + delayedHiddingHoverElements(); + } + }; + + graph.updateDraggerElements = function (){ + + // set opacity style for all elements + + rangeDragger.draggerObject.classed("superOpacityElement", !graph.options().showDraggerObject()); + domainDragger.draggerObject.classed("superOpacityElement", !graph.options().showDraggerObject()); + classDragger.draggerObject.classed("superOpacityElement", !graph.options().showDraggerObject()); + + nodeContainer.selectAll(".superHiddenElement").classed("superOpacityElement", !graph.options().showDraggerObject()); + labelContainer.selectAll(".superHiddenElement").classed("superOpacityElement", !graph.options().showDraggerObject()); + + deleteGroupElement.selectAll(".superHiddenElement").classed("superOpacityElement", !graph.options().showDraggerObject()); + addDataPropertyGroupElement.selectAll(".superHiddenElement").classed("superOpacityElement", !graph.options().showDraggerObject()); + + + }; + + function setAddDataPropertyHoverElementPosition( node ){ + var delX, delY = 0; + if ( node.renderType() === "round" ) { + var scale = 0.5 * Math.sqrt(2.0); + var oX = scale * node.actualRadius(); + var oY = scale * node.actualRadius(); + delX = node.x - oX; + delY = node.y + oY; + addDataPropertyGroupElement.attr("transform", "translate(" + delX + "," + delY + ")"); + } + } + + function setDeleteHoverElementPosition( node ){ + var delX, delY = 0; + if ( node.renderType() === "round" ) { + var scale = 0.5 * Math.sqrt(2.0); + var oX = scale * node.actualRadius(); + var oY = scale * node.actualRadius(); + delX = node.x + oX; + delY = node.y - oY; + } else { + delX = node.x + 0.5 * node.width() + 6; + delY = node.y - 0.5 * node.height() - 6; + } + deleteGroupElement.attr("transform", "translate(" + delX + "," + delY + ")"); + } + + function setDeleteHoverElementPositionProperty( property, inversed ){ + if ( property && property.labelElement() ) { + var pos = [property.labelObject().x, property.labelObject().y]; + var widthElement = parseFloat(property.getShapeElement().attr("width")); + var heightElement = parseFloat(property.getShapeElement().attr("height")); + var delX = pos[0] + 0.5 * widthElement + 6; + var delY = pos[1] - 0.5 * heightElement - 6; + // this is the lower element + if ( property.labelElement().attr("transform") === "translate(0,15)" ) + delY += 15; + // this is upper element + if ( property.labelElement().attr("transform") === "translate(0,-15)" ) + delY -= 15; + deleteGroupElement.attr("transform", "translate(" + delX + "," + delY + ")"); + } else { + deleteGroupElement.classed("hidden", true);// hide when there is no property + } + + + } + + graph.activateHoverElements = function ( val, node, touchBehaviour ){ + if ( editMode === false ) { + return; // nothing to do; + } + if ( touchBehaviour === undefined ) touchBehaviour = false; + if ( val === true ) { + if ( graph.options().drawPropertyDraggerOnHover() === true ) { + rangeDragger.hideDragger(true); + domainDragger.hideDragger(true); + shadowClone.hideClone(true); + } + // make them visible + clearTimeout(delayedHider); + clearTimeout(nodeFreezer); + if ( hoveredNodeElement && node.pinned() === false && graph.paused() === false ) { + hoveredNodeElement.frozen(false); + hoveredNodeElement.locked(false); + } + hoveredNodeElement = node; + if ( node && node.frozen() === false && node.pinned() === false ) { + node.frozen(true); + node.locked(false); + } + if ( hoveredPropertyElement && hoveredPropertyElement.focused() === false ) { + hoveredPropertyElement.labelObject().increasedLoopAngle = false; + recalculatePositions(); + // update the loopAngles; + + } + hoveredPropertyElement = undefined; + deleteGroupElement.classed("hidden", false); + setDeleteHoverElementPosition(node); + + + deleteGroupElement.selectAll("*").on("click", function (){ + if ( touchBehaviour && node.focused() === false ) { + graph.options().focuserModule().handle(node); + return; + } + graph.removeNodeViaEditor(node); + d3.event.stopPropagation(); + }) + .on("mouseover", function (){ + editElementHoverOn(node, touchBehaviour); + }) + .on("mouseout", function (){ + editElementHoverOut(node, touchBehaviour); + }); + + addDataPropertyGroupElement.classed("hidden", true); + classDragger.nodeElement.on("mouseover", editElementHoverOn) + .on("mouseout", editElementHoverOut); + classDragger.draggerObject.on("mouseover", editElementHoverOnHidden) + .on("mouseout", editElementHoverOutHidden); + + // add the dragger element; + if ( node.renderType() === "round" ) { + classDragger.svgRoot(draggerLayer); + classDragger.setParentNode(node); + classDragger.hideDragger(false); + addDataPropertyGroupElement.classed("hidden", false); + setAddDataPropertyHoverElementPosition(node); + addDataPropertyGroupElement.selectAll("*").on("click", function (){ + if ( touchBehaviour && node.focused() === false ) { + graph.options().focuserModule().handle(node); + return; + } + graph.createDataTypeProperty(node); + d3.event.stopPropagation(); + }) + .on("mouseover", function (){ + editElementHoverOn(node, touchBehaviour); + }) + .on("mouseout", function (){ + editElementHoverOut(node, touchBehaviour); + }); + } else { + classDragger.hideDragger(true); + + } + + } else { + delayedHiddingHoverElements(node, touchBehaviour); + + } + }; + + + return graph; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), +/* 58 */ +/***/ (function(module, exports, __webpack_require__) { + + var __WEBPACK_AMD_DEFINE_RESULT__;/* WEBPACK VAR INJECTION */(function(global, module) {/** + * @license + * Lodash (Custom Build) + * Build: `lodash core -o ./dist/lodash.core.js` + * Copyright OpenJS Foundation and other contributors + * Released under MIT license + * Based on Underscore.js 1.8.3 + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + */ + ;(function() { + + /** Used as a safe reference for `undefined` in pre-ES5 environments. */ + var undefined; + + /** Used as the semantic version number. */ + var VERSION = '4.17.15'; + + /** Error message constants. */ + var FUNC_ERROR_TEXT = 'Expected a function'; + + /** Used to compose bitmasks for value comparisons. */ + var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; + + /** Used to compose bitmasks for function metadata. */ + var WRAP_BIND_FLAG = 1, + WRAP_PARTIAL_FLAG = 32; + + /** Used as references for various `Number` constants. */ + var INFINITY = 1 / 0, + MAX_SAFE_INTEGER = 9007199254740991; + + /** `Object#toString` result references. */ + var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + asyncTag = '[object AsyncFunction]', + boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + numberTag = '[object Number]', + objectTag = '[object Object]', + proxyTag = '[object Proxy]', + regexpTag = '[object RegExp]', + stringTag = '[object String]'; + + /** Used to match HTML entities and HTML characters. */ + var reUnescapedHtml = /[&<>"']/g, + reHasUnescapedHtml = RegExp(reUnescapedHtml.source); + + /** Used to detect unsigned integer values. */ + var reIsUint = /^(?:0|[1-9]\d*)$/; + + /** Used to map characters to HTML entities. */ + var htmlEscapes = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''' + }; + + /** Detect free variable `global` from Node.js. */ + var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; + + /** Detect free variable `self`. */ + var freeSelf = typeof self == 'object' && self && self.Object === Object && self; + + /** Used as a reference to the global object. */ + var root = freeGlobal || freeSelf || Function('return this')(); + + /** Detect free variable `exports`. */ + var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; + + /** Detect free variable `module`. */ + var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; + + /*--------------------------------------------------------------------------*/ + + /** + * Appends the elements of `values` to `array`. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to append. + * @returns {Array} Returns `array`. + */ + function arrayPush(array, values) { + array.push.apply(array, values); + return array; + } + + /** + * The base implementation of `_.findIndex` and `_.findLastIndex` without + * support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} predicate The function invoked per iteration. + * @param {number} fromIndex The index to search from. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function baseFindIndex(array, predicate, fromIndex, fromRight) { + var length = array.length, + index = fromIndex + (fromRight ? 1 : -1); + + while ((fromRight ? index-- : ++index < length)) { + if (predicate(array[index], index, array)) { + return index; + } + } + return -1; + } + + /** + * The base implementation of `_.property` without support for deep paths. + * + * @private + * @param {string} key The key of the property to get. + * @returns {Function} Returns the new accessor function. + */ + function baseProperty(key) { + return function(object) { + return object == null ? undefined : object[key]; + }; + } + + /** + * The base implementation of `_.propertyOf` without support for deep paths. + * + * @private + * @param {Object} object The object to query. + * @returns {Function} Returns the new accessor function. + */ + function basePropertyOf(object) { + return function(key) { + return object == null ? undefined : object[key]; + }; + } + + /** + * The base implementation of `_.reduce` and `_.reduceRight`, without support + * for iteratee shorthands, which iterates over `collection` using `eachFunc`. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} accumulator The initial value. + * @param {boolean} initAccum Specify using the first or last element of + * `collection` as the initial value. + * @param {Function} eachFunc The function to iterate over `collection`. + * @returns {*} Returns the accumulated value. + */ + function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { + eachFunc(collection, function(value, index, collection) { + accumulator = initAccum + ? (initAccum = false, value) + : iteratee(accumulator, value, index, collection); + }); + return accumulator; + } + + /** + * The base implementation of `_.values` and `_.valuesIn` which creates an + * array of `object` property values corresponding to the property names + * of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the array of property values. + */ + function baseValues(object, props) { + return baseMap(props, function(key) { + return object[key]; + }); + } + + /** + * Used by `_.escape` to convert characters to HTML entities. + * + * @private + * @param {string} chr The matched character to escape. + * @returns {string} Returns the escaped character. + */ + var escapeHtmlChar = basePropertyOf(htmlEscapes); + + /** + * Creates a unary function that invokes `func` with its argument transformed. + * + * @private + * @param {Function} func The function to wrap. + * @param {Function} transform The argument transform. + * @returns {Function} Returns the new function. + */ + function overArg(func, transform) { + return function(arg) { + return func(transform(arg)); + }; + } + + /*--------------------------------------------------------------------------*/ + + /** Used for built-in method references. */ + var arrayProto = Array.prototype, + objectProto = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty = objectProto.hasOwnProperty; + + /** Used to generate unique IDs. */ + var idCounter = 0; + + /** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ + var nativeObjectToString = objectProto.toString; + + /** Used to restore the original `_` reference in `_.noConflict`. */ + var oldDash = root._; + + /** Built-in value references. */ + var objectCreate = Object.create, + propertyIsEnumerable = objectProto.propertyIsEnumerable; + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeIsFinite = root.isFinite, + nativeKeys = overArg(Object.keys, Object), + nativeMax = Math.max; + + /*------------------------------------------------------------------------*/ + + /** + * Creates a `lodash` object which wraps `value` to enable implicit method + * chain sequences. Methods that operate on and return arrays, collections, + * and functions can be chained together. Methods that retrieve a single value + * or may return a primitive value will automatically end the chain sequence + * and return the unwrapped value. Otherwise, the value must be unwrapped + * with `_#value`. + * + * Explicit chain sequences, which must be unwrapped with `_#value`, may be + * enabled using `_.chain`. + * + * The execution of chained methods is lazy, that is, it's deferred until + * `_#value` is implicitly or explicitly called. + * + * Lazy evaluation allows several methods to support shortcut fusion. + * Shortcut fusion is an optimization to merge iteratee calls; this avoids + * the creation of intermediate arrays and can greatly reduce the number of + * iteratee executions. Sections of a chain sequence qualify for shortcut + * fusion if the section is applied to an array and iteratees accept only + * one argument. The heuristic for whether a section qualifies for shortcut + * fusion is subject to change. + * + * Chaining is supported in custom builds as long as the `_#value` method is + * directly or indirectly included in the build. + * + * In addition to lodash methods, wrappers have `Array` and `String` methods. + * + * The wrapper `Array` methods are: + * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift` + * + * The wrapper `String` methods are: + * `replace` and `split` + * + * The wrapper methods that support shortcut fusion are: + * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`, + * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`, + * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray` + * + * The chainable wrapper methods are: + * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`, + * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`, + * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`, + * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`, + * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`, + * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`, + * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`, + * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`, + * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`, + * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`, + * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`, + * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`, + * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`, + * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`, + * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`, + * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`, + * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`, + * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`, + * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`, + * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`, + * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`, + * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`, + * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`, + * `zipObject`, `zipObjectDeep`, and `zipWith` + * + * The wrapper methods that are **not** chainable by default are: + * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`, + * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`, + * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`, + * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`, + * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`, + * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`, + * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`, + * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`, + * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`, + * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`, + * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`, + * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`, + * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`, + * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`, + * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`, + * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`, + * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`, + * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`, + * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`, + * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`, + * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`, + * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`, + * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`, + * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`, + * `upperFirst`, `value`, and `words` + * + * @name _ + * @constructor + * @category Seq + * @param {*} value The value to wrap in a `lodash` instance. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * function square(n) { + * return n * n; + * } + * + * var wrapped = _([1, 2, 3]); + * + * // Returns an unwrapped value. + * wrapped.reduce(_.add); + * // => 6 + * + * // Returns a wrapped value. + * var squares = wrapped.map(square); + * + * _.isArray(squares); + * // => false + * + * _.isArray(squares.value()); + * // => true + */ + function lodash(value) { + return value instanceof LodashWrapper + ? value + : new LodashWrapper(value); + } + + /** + * The base implementation of `_.create` without support for assigning + * properties to the created object. + * + * @private + * @param {Object} proto The object to inherit from. + * @returns {Object} Returns the new object. + */ + var baseCreate = (function() { + function object() {} + return function(proto) { + if (!isObject(proto)) { + return {}; + } + if (objectCreate) { + return objectCreate(proto); + } + object.prototype = proto; + var result = new object; + object.prototype = undefined; + return result; + }; + }()); + + /** + * The base constructor for creating `lodash` wrapper objects. + * + * @private + * @param {*} value The value to wrap. + * @param {boolean} [chainAll] Enable explicit method chain sequences. + */ + function LodashWrapper(value, chainAll) { + this.__wrapped__ = value; + this.__actions__ = []; + this.__chain__ = !!chainAll; + } + + LodashWrapper.prototype = baseCreate(lodash.prototype); + LodashWrapper.prototype.constructor = LodashWrapper; + + /*------------------------------------------------------------------------*/ + + /** + * Assigns `value` to `key` of `object` if the existing value is not equivalent + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ + function assignValue(object, key, value) { + var objValue = object[key]; + if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || + (value === undefined && !(key in object))) { + baseAssignValue(object, key, value); + } + } + + /** + * The base implementation of `assignValue` and `assignMergeValue` without + * value checks. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ + function baseAssignValue(object, key, value) { + object[key] = value; + } + + /** + * The base implementation of `_.delay` and `_.defer` which accepts `args` + * to provide to `func`. + * + * @private + * @param {Function} func The function to delay. + * @param {number} wait The number of milliseconds to delay invocation. + * @param {Array} args The arguments to provide to `func`. + * @returns {number|Object} Returns the timer id or timeout object. + */ + function baseDelay(func, wait, args) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + return setTimeout(function() { func.apply(undefined, args); }, wait); + } + + /** + * The base implementation of `_.forEach` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + */ + var baseEach = createBaseEach(baseForOwn); + + /** + * The base implementation of `_.every` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if all elements pass the predicate check, + * else `false` + */ + function baseEvery(collection, predicate) { + var result = true; + baseEach(collection, function(value, index, collection) { + result = !!predicate(value, index, collection); + return result; + }); + return result; + } + + /** + * The base implementation of methods like `_.max` and `_.min` which accepts a + * `comparator` to determine the extremum value. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The iteratee invoked per iteration. + * @param {Function} comparator The comparator used to compare values. + * @returns {*} Returns the extremum value. + */ + function baseExtremum(array, iteratee, comparator) { + var index = -1, + length = array.length; + + while (++index < length) { + var value = array[index], + current = iteratee(value); + + if (current != null && (computed === undefined + ? (current === current && !false) + : comparator(current, computed) + )) { + var computed = current, + result = value; + } + } + return result; + } + + /** + * The base implementation of `_.filter` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ + function baseFilter(collection, predicate) { + var result = []; + baseEach(collection, function(value, index, collection) { + if (predicate(value, index, collection)) { + result.push(value); + } + }); + return result; + } + + /** + * The base implementation of `_.flatten` with support for restricting flattening. + * + * @private + * @param {Array} array The array to flatten. + * @param {number} depth The maximum recursion depth. + * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. + * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. + * @param {Array} [result=[]] The initial result value. + * @returns {Array} Returns the new flattened array. + */ + function baseFlatten(array, depth, predicate, isStrict, result) { + var index = -1, + length = array.length; + + predicate || (predicate = isFlattenable); + result || (result = []); + + while (++index < length) { + var value = array[index]; + if (depth > 0 && predicate(value)) { + if (depth > 1) { + // Recursively flatten arrays (susceptible to call stack limits). + baseFlatten(value, depth - 1, predicate, isStrict, result); + } else { + arrayPush(result, value); + } + } else if (!isStrict) { + result[result.length] = value; + } + } + return result; + } + + /** + * The base implementation of `baseForOwn` which iterates over `object` + * properties returned by `keysFunc` and invokes `iteratee` for each property. + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {Function} keysFunc The function to get the keys of `object`. + * @returns {Object} Returns `object`. + */ + var baseFor = createBaseFor(); + + /** + * The base implementation of `_.forOwn` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ + function baseForOwn(object, iteratee) { + return object && baseFor(object, iteratee, keys); + } + + /** + * The base implementation of `_.functions` which creates an array of + * `object` function property names filtered from `props`. + * + * @private + * @param {Object} object The object to inspect. + * @param {Array} props The property names to filter. + * @returns {Array} Returns the function names. + */ + function baseFunctions(object, props) { + return baseFilter(props, function(key) { + return isFunction(object[key]); + }); + } + + /** + * The base implementation of `getTag` without fallbacks for buggy environments. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ + function baseGetTag(value) { + return objectToString(value); + } + + /** + * The base implementation of `_.gt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than `other`, + * else `false`. + */ + function baseGt(value, other) { + return value > other; + } + + /** + * The base implementation of `_.isArguments`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + */ + var baseIsArguments = noop; + + /** + * The base implementation of `_.isDate` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a date object, else `false`. + */ + function baseIsDate(value) { + return isObjectLike(value) && baseGetTag(value) == dateTag; + } + + /** + * The base implementation of `_.isEqual` which supports partial comparisons + * and tracks traversed objects. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {boolean} bitmask The bitmask flags. + * 1 - Unordered comparison + * 2 - Partial comparison + * @param {Function} [customizer] The function to customize comparisons. + * @param {Object} [stack] Tracks traversed `value` and `other` objects. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + */ + function baseIsEqual(value, other, bitmask, customizer, stack) { + if (value === other) { + return true; + } + if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) { + return value !== value && other !== other; + } + return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); + } + + /** + * A specialized version of `baseIsEqual` for arrays and objects which performs + * deep comparisons and tracks traversed objects enabling objects with circular + * references to be compared. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} [stack] Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { + var objIsArr = isArray(object), + othIsArr = isArray(other), + objTag = objIsArr ? arrayTag : baseGetTag(object), + othTag = othIsArr ? arrayTag : baseGetTag(other); + + objTag = objTag == argsTag ? objectTag : objTag; + othTag = othTag == argsTag ? objectTag : othTag; + + var objIsObj = objTag == objectTag, + othIsObj = othTag == objectTag, + isSameTag = objTag == othTag; + + stack || (stack = []); + var objStack = find(stack, function(entry) { + return entry[0] == object; + }); + var othStack = find(stack, function(entry) { + return entry[0] == other; + }); + if (objStack && othStack) { + return objStack[1] == other; + } + stack.push([object, other]); + stack.push([other, object]); + if (isSameTag && !objIsObj) { + var result = (objIsArr) + ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) + : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); + stack.pop(); + return result; + } + if (!(bitmask & COMPARE_PARTIAL_FLAG)) { + var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'), + othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__'); + + if (objIsWrapped || othIsWrapped) { + var objUnwrapped = objIsWrapped ? object.value() : object, + othUnwrapped = othIsWrapped ? other.value() : other; + + var result = equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); + stack.pop(); + return result; + } + } + if (!isSameTag) { + return false; + } + var result = equalObjects(object, other, bitmask, customizer, equalFunc, stack); + stack.pop(); + return result; + } + + /** + * The base implementation of `_.isRegExp` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. + */ + function baseIsRegExp(value) { + return isObjectLike(value) && baseGetTag(value) == regexpTag; + } + + /** + * The base implementation of `_.iteratee`. + * + * @private + * @param {*} [value=_.identity] The value to convert to an iteratee. + * @returns {Function} Returns the iteratee. + */ + function baseIteratee(func) { + if (typeof func == 'function') { + return func; + } + if (func == null) { + return identity; + } + return (typeof func == 'object' ? baseMatches : baseProperty)(func); + } + + /** + * The base implementation of `_.lt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is less than `other`, + * else `false`. + */ + function baseLt(value, other) { + return value < other; + } + + /** + * The base implementation of `_.map` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ + function baseMap(collection, iteratee) { + var index = -1, + result = isArrayLike(collection) ? Array(collection.length) : []; + + baseEach(collection, function(value, key, collection) { + result[++index] = iteratee(value, key, collection); + }); + return result; + } + + /** + * The base implementation of `_.matches` which doesn't clone `source`. + * + * @private + * @param {Object} source The object of property values to match. + * @returns {Function} Returns the new spec function. + */ + function baseMatches(source) { + var props = nativeKeys(source); + return function(object) { + var length = props.length; + if (object == null) { + return !length; + } + object = Object(object); + while (length--) { + var key = props[length]; + if (!(key in object && + baseIsEqual(source[key], object[key], COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG) + )) { + return false; + } + } + return true; + }; + } + + /** + * The base implementation of `_.pick` without support for individual + * property identifiers. + * + * @private + * @param {Object} object The source object. + * @param {string[]} paths The property paths to pick. + * @returns {Object} Returns the new object. + */ + function basePick(object, props) { + object = Object(object); + return reduce(props, function(result, key) { + if (key in object) { + result[key] = object[key]; + } + return result; + }, {}); + } + + /** + * The base implementation of `_.rest` which doesn't validate or coerce arguments. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @returns {Function} Returns the new function. + */ + function baseRest(func, start) { + return setToString(overRest(func, start, identity), func + ''); + } + + /** + * The base implementation of `_.slice` without an iteratee call guard. + * + * @private + * @param {Array} array The array to slice. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the slice of `array`. + */ + function baseSlice(array, start, end) { + var index = -1, + length = array.length; + + if (start < 0) { + start = -start > length ? 0 : (length + start); + } + end = end > length ? length : end; + if (end < 0) { + end += length; + } + length = start > end ? 0 : ((end - start) >>> 0); + start >>>= 0; + + var result = Array(length); + while (++index < length) { + result[index] = array[index + start]; + } + return result; + } + + /** + * Copies the values of `source` to `array`. + * + * @private + * @param {Array} source The array to copy values from. + * @param {Array} [array=[]] The array to copy values to. + * @returns {Array} Returns `array`. + */ + function copyArray(source) { + return baseSlice(source, 0, source.length); + } + + /** + * The base implementation of `_.some` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ + function baseSome(collection, predicate) { + var result; + + baseEach(collection, function(value, index, collection) { + result = predicate(value, index, collection); + return !result; + }); + return !!result; + } + + /** + * The base implementation of `wrapperValue` which returns the result of + * performing a sequence of actions on the unwrapped `value`, where each + * successive action is supplied the return value of the previous. + * + * @private + * @param {*} value The unwrapped value. + * @param {Array} actions Actions to perform to resolve the unwrapped value. + * @returns {*} Returns the resolved value. + */ + function baseWrapperValue(value, actions) { + var result = value; + return reduce(actions, function(result, action) { + return action.func.apply(action.thisArg, arrayPush([result], action.args)); + }, result); + } + + /** + * Compares values to sort them in ascending order. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {number} Returns the sort order indicator for `value`. + */ + function compareAscending(value, other) { + if (value !== other) { + var valIsDefined = value !== undefined, + valIsNull = value === null, + valIsReflexive = value === value, + valIsSymbol = false; + + var othIsDefined = other !== undefined, + othIsNull = other === null, + othIsReflexive = other === other, + othIsSymbol = false; + + if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) || + (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) || + (valIsNull && othIsDefined && othIsReflexive) || + (!valIsDefined && othIsReflexive) || + !valIsReflexive) { + return 1; + } + if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) || + (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) || + (othIsNull && valIsDefined && valIsReflexive) || + (!othIsDefined && valIsReflexive) || + !othIsReflexive) { + return -1; + } + } + return 0; + } + + /** + * Copies properties of `source` to `object`. + * + * @private + * @param {Object} source The object to copy properties from. + * @param {Array} props The property identifiers to copy. + * @param {Object} [object={}] The object to copy properties to. + * @param {Function} [customizer] The function to customize copied values. + * @returns {Object} Returns `object`. + */ + function copyObject(source, props, object, customizer) { + var isNew = !object; + object || (object = {}); + + var index = -1, + length = props.length; + + while (++index < length) { + var key = props[index]; + + var newValue = customizer + ? customizer(object[key], source[key], key, object, source) + : undefined; + + if (newValue === undefined) { + newValue = source[key]; + } + if (isNew) { + baseAssignValue(object, key, newValue); + } else { + assignValue(object, key, newValue); + } + } + return object; + } + + /** + * Creates a function like `_.assign`. + * + * @private + * @param {Function} assigner The function to assign values. + * @returns {Function} Returns the new assigner function. + */ + function createAssigner(assigner) { + return baseRest(function(object, sources) { + var index = -1, + length = sources.length, + customizer = length > 1 ? sources[length - 1] : undefined; + + customizer = (assigner.length > 3 && typeof customizer == 'function') + ? (length--, customizer) + : undefined; + + object = Object(object); + while (++index < length) { + var source = sources[index]; + if (source) { + assigner(object, source, index, customizer); + } + } + return object; + }); + } + + /** + * Creates a `baseEach` or `baseEachRight` function. + * + * @private + * @param {Function} eachFunc The function to iterate over a collection. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ + function createBaseEach(eachFunc, fromRight) { + return function(collection, iteratee) { + if (collection == null) { + return collection; + } + if (!isArrayLike(collection)) { + return eachFunc(collection, iteratee); + } + var length = collection.length, + index = fromRight ? length : -1, + iterable = Object(collection); + + while ((fromRight ? index-- : ++index < length)) { + if (iteratee(iterable[index], index, iterable) === false) { + break; + } + } + return collection; + }; + } + + /** + * Creates a base function for methods like `_.forIn` and `_.forOwn`. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ + function createBaseFor(fromRight) { + return function(object, iteratee, keysFunc) { + var index = -1, + iterable = Object(object), + props = keysFunc(object), + length = props.length; + + while (length--) { + var key = props[fromRight ? length : ++index]; + if (iteratee(iterable[key], key, iterable) === false) { + break; + } + } + return object; + }; + } + + /** + * Creates a function that produces an instance of `Ctor` regardless of + * whether it was invoked as part of a `new` expression or by `call` or `apply`. + * + * @private + * @param {Function} Ctor The constructor to wrap. + * @returns {Function} Returns the new wrapped function. + */ + function createCtor(Ctor) { + return function() { + // Use a `switch` statement to work with class constructors. See + // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist + // for more details. + var args = arguments; + var thisBinding = baseCreate(Ctor.prototype), + result = Ctor.apply(thisBinding, args); + + // Mimic the constructor's `return` behavior. + // See https://es5.github.io/#x13.2.2 for more details. + return isObject(result) ? result : thisBinding; + }; + } + + /** + * Creates a `_.find` or `_.findLast` function. + * + * @private + * @param {Function} findIndexFunc The function to find the collection index. + * @returns {Function} Returns the new find function. + */ + function createFind(findIndexFunc) { + return function(collection, predicate, fromIndex) { + var iterable = Object(collection); + if (!isArrayLike(collection)) { + var iteratee = baseIteratee(predicate, 3); + collection = keys(collection); + predicate = function(key) { return iteratee(iterable[key], key, iterable); }; + } + var index = findIndexFunc(collection, predicate, fromIndex); + return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined; + }; + } + + /** + * Creates a function that wraps `func` to invoke it with the `this` binding + * of `thisArg` and `partials` prepended to the arguments it receives. + * + * @private + * @param {Function} func The function to wrap. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @param {*} thisArg The `this` binding of `func`. + * @param {Array} partials The arguments to prepend to those provided to + * the new function. + * @returns {Function} Returns the new wrapped function. + */ + function createPartial(func, bitmask, thisArg, partials) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + var isBind = bitmask & WRAP_BIND_FLAG, + Ctor = createCtor(func); + + function wrapper() { + var argsIndex = -1, + argsLength = arguments.length, + leftIndex = -1, + leftLength = partials.length, + args = Array(leftLength + argsLength), + fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; + + while (++leftIndex < leftLength) { + args[leftIndex] = partials[leftIndex]; + } + while (argsLength--) { + args[leftIndex++] = arguments[++argsIndex]; + } + return fn.apply(isBind ? thisArg : this, args); + } + return wrapper; + } + + /** + * A specialized version of `baseIsEqualDeep` for arrays with support for + * partial deep comparisons. + * + * @private + * @param {Array} array The array to compare. + * @param {Array} other The other array to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `array` and `other` objects. + * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. + */ + function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, + arrLength = array.length, + othLength = other.length; + + if (arrLength != othLength && !(isPartial && othLength > arrLength)) { + return false; + } + var index = -1, + result = true, + seen = (bitmask & COMPARE_UNORDERED_FLAG) ? [] : undefined; + + // Ignore non-index properties. + while (++index < arrLength) { + var arrValue = array[index], + othValue = other[index]; + + var compared; + if (compared !== undefined) { + if (compared) { + continue; + } + result = false; + break; + } + // Recursively compare arrays (susceptible to call stack limits). + if (seen) { + if (!baseSome(other, function(othValue, othIndex) { + if (!indexOf(seen, othIndex) && + (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { + return seen.push(othIndex); + } + })) { + result = false; + break; + } + } else if (!( + arrValue === othValue || + equalFunc(arrValue, othValue, bitmask, customizer, stack) + )) { + result = false; + break; + } + } + return result; + } + + /** + * A specialized version of `baseIsEqualDeep` for comparing objects of + * the same `toStringTag`. + * + * **Note:** This function only supports comparing values with tags of + * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {string} tag The `toStringTag` of the objects to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { + switch (tag) { + + case boolTag: + case dateTag: + case numberTag: + // Coerce booleans to `1` or `0` and dates to milliseconds. + // Invalid dates are coerced to `NaN`. + return eq(+object, +other); + + case errorTag: + return object.name == other.name && object.message == other.message; + + case regexpTag: + case stringTag: + // Coerce regexes to strings and treat strings, primitives and objects, + // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring + // for more details. + return object == (other + ''); + + } + return false; + } + + /** + * A specialized version of `baseIsEqualDeep` for objects with support for + * partial deep comparisons. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, + objProps = keys(object), + objLength = objProps.length, + othProps = keys(other), + othLength = othProps.length; + + if (objLength != othLength && !isPartial) { + return false; + } + var index = objLength; + while (index--) { + var key = objProps[index]; + if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) { + return false; + } + } + var result = true; + + var skipCtor = isPartial; + while (++index < objLength) { + key = objProps[index]; + var objValue = object[key], + othValue = other[key]; + + var compared; + // Recursively compare objects (susceptible to call stack limits). + if (!(compared === undefined + ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) + : compared + )) { + result = false; + break; + } + skipCtor || (skipCtor = key == 'constructor'); + } + if (result && !skipCtor) { + var objCtor = object.constructor, + othCtor = other.constructor; + + // Non `Object` object instances with different constructors are not equal. + if (objCtor != othCtor && + ('constructor' in object && 'constructor' in other) && + !(typeof objCtor == 'function' && objCtor instanceof objCtor && + typeof othCtor == 'function' && othCtor instanceof othCtor)) { + result = false; + } + } + return result; + } + + /** + * A specialized version of `baseRest` which flattens the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @returns {Function} Returns the new function. + */ + function flatRest(func) { + return setToString(overRest(func, undefined, flatten), func + ''); + } + + /** + * Checks if `value` is a flattenable `arguments` object or array. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. + */ + function isFlattenable(value) { + return isArray(value) || isArguments(value); + } + + /** + * Checks if `value` is a valid array-like index. + * + * @private + * @param {*} value The value to check. + * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. + * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. + */ + function isIndex(value, length) { + var type = typeof value; + length = length == null ? MAX_SAFE_INTEGER : length; + + return !!length && + (type == 'number' || + (type != 'symbol' && reIsUint.test(value))) && + (value > -1 && value % 1 == 0 && value < length); + } + + /** + * Checks if the given arguments are from an iteratee call. + * + * @private + * @param {*} value The potential iteratee value argument. + * @param {*} index The potential iteratee index or key argument. + * @param {*} object The potential iteratee object argument. + * @returns {boolean} Returns `true` if the arguments are from an iteratee call, + * else `false`. + */ + function isIterateeCall(value, index, object) { + if (!isObject(object)) { + return false; + } + var type = typeof index; + if (type == 'number' + ? (isArrayLike(object) && isIndex(index, object.length)) + : (type == 'string' && index in object) + ) { + return eq(object[index], value); + } + return false; + } + + /** + * This function is like + * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * except that it includes inherited enumerable properties. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ + function nativeKeysIn(object) { + var result = []; + if (object != null) { + for (var key in Object(object)) { + result.push(key); + } + } + return result; + } + + /** + * Converts `value` to a string using `Object.prototype.toString`. + * + * @private + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + */ + function objectToString(value) { + return nativeObjectToString.call(value); + } + + /** + * A specialized version of `baseRest` which transforms the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @param {Function} transform The rest array transform. + * @returns {Function} Returns the new function. + */ + function overRest(func, start, transform) { + start = nativeMax(start === undefined ? (func.length - 1) : start, 0); + return function() { + var args = arguments, + index = -1, + length = nativeMax(args.length - start, 0), + array = Array(length); + + while (++index < length) { + array[index] = args[start + index]; + } + index = -1; + var otherArgs = Array(start + 1); + while (++index < start) { + otherArgs[index] = args[index]; + } + otherArgs[start] = transform(array); + return func.apply(this, otherArgs); + }; + } + + /** + * Sets the `toString` method of `func` to return `string`. + * + * @private + * @param {Function} func The function to modify. + * @param {Function} string The `toString` result. + * @returns {Function} Returns `func`. + */ + var setToString = identity; + + /*------------------------------------------------------------------------*/ + + /** + * Creates an array with all falsey values removed. The values `false`, `null`, + * `0`, `""`, `undefined`, and `NaN` are falsey. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to compact. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.compact([0, 1, false, 2, '', 3]); + * // => [1, 2, 3] + */ + function compact(array) { + return baseFilter(array, Boolean); + } + + /** + * Creates a new array concatenating `array` with any additional arrays + * and/or values. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to concatenate. + * @param {...*} [values] The values to concatenate. + * @returns {Array} Returns the new concatenated array. + * @example + * + * var array = [1]; + * var other = _.concat(array, 2, [3], [[4]]); + * + * console.log(other); + * // => [1, 2, 3, [4]] + * + * console.log(array); + * // => [1] + */ + function concat() { + var length = arguments.length; + if (!length) { + return []; + } + var args = Array(length - 1), + array = arguments[0], + index = length; + + while (index--) { + args[index - 1] = arguments[index]; + } + return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1)); + } + + /** + * This method is like `_.find` except that it returns the index of the first + * element `predicate` returns truthy for instead of the element itself. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.findIndex(users, function(o) { return o.user == 'barney'; }); + * // => 0 + * + * // The `_.matches` iteratee shorthand. + * _.findIndex(users, { 'user': 'fred', 'active': false }); + * // => 1 + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findIndex(users, ['active', false]); + * // => 0 + * + * // The `_.property` iteratee shorthand. + * _.findIndex(users, 'active'); + * // => 2 + */ + function findIndex(array, predicate, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = fromIndex == null ? 0 : toInteger(fromIndex); + if (index < 0) { + index = nativeMax(length + index, 0); + } + return baseFindIndex(array, baseIteratee(predicate, 3), index); + } + + /** + * Flattens `array` a single level deep. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flatten([1, [2, [3, [4]], 5]]); + * // => [1, 2, [3, [4]], 5] + */ + function flatten(array) { + var length = array == null ? 0 : array.length; + return length ? baseFlatten(array, 1) : []; + } + + /** + * Recursively flattens `array`. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flattenDeep([1, [2, [3, [4]], 5]]); + * // => [1, 2, 3, 4, 5] + */ + function flattenDeep(array) { + var length = array == null ? 0 : array.length; + return length ? baseFlatten(array, INFINITY) : []; + } + + /** + * Gets the first element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @alias first + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the first element of `array`. + * @example + * + * _.head([1, 2, 3]); + * // => 1 + * + * _.head([]); + * // => undefined + */ + function head(array) { + return (array && array.length) ? array[0] : undefined; + } + + /** + * Gets the index at which the first occurrence of `value` is found in `array` + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. If `fromIndex` is negative, it's used as the + * offset from the end of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} [fromIndex=0] The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.indexOf([1, 2, 1, 2], 2); + * // => 1 + * + * // Search from the `fromIndex`. + * _.indexOf([1, 2, 1, 2], 2, 2); + * // => 3 + */ + function indexOf(array, value, fromIndex) { + var length = array == null ? 0 : array.length; + if (typeof fromIndex == 'number') { + fromIndex = fromIndex < 0 ? nativeMax(length + fromIndex, 0) : fromIndex; + } else { + fromIndex = 0; + } + var index = (fromIndex || 0) - 1, + isReflexive = value === value; + + while (++index < length) { + var other = array[index]; + if ((isReflexive ? other === value : other !== other)) { + return index; + } + } + return -1; + } + + /** + * Gets the last element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the last element of `array`. + * @example + * + * _.last([1, 2, 3]); + * // => 3 + */ + function last(array) { + var length = array == null ? 0 : array.length; + return length ? array[length - 1] : undefined; + } + + /** + * Creates a slice of `array` from `start` up to, but not including, `end`. + * + * **Note:** This method is used instead of + * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are + * returned. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to slice. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the slice of `array`. + */ + function slice(array, start, end) { + var length = array == null ? 0 : array.length; + start = start == null ? 0 : +start; + end = end === undefined ? length : +end; + return length ? baseSlice(array, start, end) : []; + } + + /*------------------------------------------------------------------------*/ + + /** + * Creates a `lodash` wrapper instance that wraps `value` with explicit method + * chain sequences enabled. The result of such sequences must be unwrapped + * with `_#value`. + * + * @static + * @memberOf _ + * @since 1.3.0 + * @category Seq + * @param {*} value The value to wrap. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 }, + * { 'user': 'pebbles', 'age': 1 } + * ]; + * + * var youngest = _ + * .chain(users) + * .sortBy('age') + * .map(function(o) { + * return o.user + ' is ' + o.age; + * }) + * .head() + * .value(); + * // => 'pebbles is 1' + */ + function chain(value) { + var result = lodash(value); + result.__chain__ = true; + return result; + } + + /** + * This method invokes `interceptor` and returns `value`. The interceptor + * is invoked with one argument; (value). The purpose of this method is to + * "tap into" a method chain sequence in order to modify intermediate results. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Seq + * @param {*} value The value to provide to `interceptor`. + * @param {Function} interceptor The function to invoke. + * @returns {*} Returns `value`. + * @example + * + * _([1, 2, 3]) + * .tap(function(array) { + * // Mutate input array. + * array.pop(); + * }) + * .reverse() + * .value(); + * // => [2, 1] + */ + function tap(value, interceptor) { + interceptor(value); + return value; + } + + /** + * This method is like `_.tap` except that it returns the result of `interceptor`. + * The purpose of this method is to "pass thru" values replacing intermediate + * results in a method chain sequence. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Seq + * @param {*} value The value to provide to `interceptor`. + * @param {Function} interceptor The function to invoke. + * @returns {*} Returns the result of `interceptor`. + * @example + * + * _(' abc ') + * .chain() + * .trim() + * .thru(function(value) { + * return [value]; + * }) + * .value(); + * // => ['abc'] + */ + function thru(value, interceptor) { + return interceptor(value); + } + + /** + * Creates a `lodash` wrapper instance with explicit method chain sequences enabled. + * + * @name chain + * @memberOf _ + * @since 0.1.0 + * @category Seq + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 } + * ]; + * + * // A sequence without explicit chaining. + * _(users).head(); + * // => { 'user': 'barney', 'age': 36 } + * + * // A sequence with explicit chaining. + * _(users) + * .chain() + * .head() + * .pick('user') + * .value(); + * // => { 'user': 'barney' } + */ + function wrapperChain() { + return chain(this); + } + + /** + * Executes the chain sequence to resolve the unwrapped value. + * + * @name value + * @memberOf _ + * @since 0.1.0 + * @alias toJSON, valueOf + * @category Seq + * @returns {*} Returns the resolved unwrapped value. + * @example + * + * _([1, 2, 3]).value(); + * // => [1, 2, 3] + */ + function wrapperValue() { + return baseWrapperValue(this.__wrapped__, this.__actions__); + } + + /*------------------------------------------------------------------------*/ + + /** + * Checks if `predicate` returns truthy for **all** elements of `collection`. + * Iteration is stopped once `predicate` returns falsey. The predicate is + * invoked with three arguments: (value, index|key, collection). + * + * **Note:** This method returns `true` for + * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because + * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of + * elements of empty collections. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {boolean} Returns `true` if all elements pass the predicate check, + * else `false`. + * @example + * + * _.every([true, 1, null, 'yes'], Boolean); + * // => false + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': false }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * // The `_.matches` iteratee shorthand. + * _.every(users, { 'user': 'barney', 'active': false }); + * // => false + * + * // The `_.matchesProperty` iteratee shorthand. + * _.every(users, ['active', false]); + * // => true + * + * // The `_.property` iteratee shorthand. + * _.every(users, 'active'); + * // => false + */ + function every(collection, predicate, guard) { + predicate = guard ? undefined : predicate; + return baseEvery(collection, baseIteratee(predicate)); + } + + /** + * Iterates over elements of `collection`, returning an array of all elements + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * **Note:** Unlike `_.remove`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + * @see _.reject + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * _.filter(users, function(o) { return !o.active; }); + * // => objects for ['fred'] + * + * // The `_.matches` iteratee shorthand. + * _.filter(users, { 'age': 36, 'active': true }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.filter(users, ['active', false]); + * // => objects for ['fred'] + * + * // The `_.property` iteratee shorthand. + * _.filter(users, 'active'); + * // => objects for ['barney'] + */ + function filter(collection, predicate) { + return baseFilter(collection, baseIteratee(predicate)); + } + + /** + * Iterates over elements of `collection`, returning the first element + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false }, + * { 'user': 'pebbles', 'age': 1, 'active': true } + * ]; + * + * _.find(users, function(o) { return o.age < 40; }); + * // => object for 'barney' + * + * // The `_.matches` iteratee shorthand. + * _.find(users, { 'age': 1, 'active': true }); + * // => object for 'pebbles' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.find(users, ['active', false]); + * // => object for 'fred' + * + * // The `_.property` iteratee shorthand. + * _.find(users, 'active'); + * // => object for 'barney' + */ + var find = createFind(findIndex); + + /** + * Iterates over elements of `collection` and invokes `iteratee` for each element. + * The iteratee is invoked with three arguments: (value, index|key, collection). + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * **Note:** As with other "Collections" methods, objects with a "length" + * property are iterated like arrays. To avoid this behavior use `_.forIn` + * or `_.forOwn` for object iteration. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @alias each + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + * @see _.forEachRight + * @example + * + * _.forEach([1, 2], function(value) { + * console.log(value); + * }); + * // => Logs `1` then `2`. + * + * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ + function forEach(collection, iteratee) { + return baseEach(collection, baseIteratee(iteratee)); + } + + /** + * Creates an array of values by running each element in `collection` thru + * `iteratee`. The iteratee is invoked with three arguments: + * (value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. + * + * The guarded methods are: + * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`, + * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`, + * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`, + * `template`, `trim`, `trimEnd`, `trimStart`, and `words` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + * @example + * + * function square(n) { + * return n * n; + * } + * + * _.map([4, 8], square); + * // => [16, 64] + * + * _.map({ 'a': 4, 'b': 8 }, square); + * // => [16, 64] (iteration order is not guaranteed) + * + * var users = [ + * { 'user': 'barney' }, + * { 'user': 'fred' } + * ]; + * + * // The `_.property` iteratee shorthand. + * _.map(users, 'user'); + * // => ['barney', 'fred'] + */ + function map(collection, iteratee) { + return baseMap(collection, baseIteratee(iteratee)); + } + + /** + * Reduces `collection` to a value which is the accumulated result of running + * each element in `collection` thru `iteratee`, where each successive + * invocation is supplied the return value of the previous. If `accumulator` + * is not given, the first element of `collection` is used as the initial + * value. The iteratee is invoked with four arguments: + * (accumulator, value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.reduce`, `_.reduceRight`, and `_.transform`. + * + * The guarded methods are: + * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`, + * and `sortBy` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @returns {*} Returns the accumulated value. + * @see _.reduceRight + * @example + * + * _.reduce([1, 2], function(sum, n) { + * return sum + n; + * }, 0); + * // => 3 + * + * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { + * (result[value] || (result[value] = [])).push(key); + * return result; + * }, {}); + * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed) + */ + function reduce(collection, iteratee, accumulator) { + return baseReduce(collection, baseIteratee(iteratee), accumulator, arguments.length < 3, baseEach); + } + + /** + * Gets the size of `collection` by returning its length for array-like + * values or the number of own enumerable string keyed properties for objects. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object|string} collection The collection to inspect. + * @returns {number} Returns the collection size. + * @example + * + * _.size([1, 2, 3]); + * // => 3 + * + * _.size({ 'a': 1, 'b': 2 }); + * // => 2 + * + * _.size('pebbles'); + * // => 7 + */ + function size(collection) { + if (collection == null) { + return 0; + } + collection = isArrayLike(collection) ? collection : nativeKeys(collection); + return collection.length; + } + + /** + * Checks if `predicate` returns truthy for **any** element of `collection`. + * Iteration is stopped once `predicate` returns truthy. The predicate is + * invoked with three arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + * @example + * + * _.some([null, 0, 'yes', false], Boolean); + * // => true + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false } + * ]; + * + * // The `_.matches` iteratee shorthand. + * _.some(users, { 'user': 'barney', 'active': false }); + * // => false + * + * // The `_.matchesProperty` iteratee shorthand. + * _.some(users, ['active', false]); + * // => true + * + * // The `_.property` iteratee shorthand. + * _.some(users, 'active'); + * // => true + */ + function some(collection, predicate, guard) { + predicate = guard ? undefined : predicate; + return baseSome(collection, baseIteratee(predicate)); + } + + /** + * Creates an array of elements, sorted in ascending order by the results of + * running each element in a collection thru each iteratee. This method + * performs a stable sort, that is, it preserves the original sort order of + * equal elements. The iteratees are invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {...(Function|Function[])} [iteratees=[_.identity]] + * The iteratees to sort by. + * @returns {Array} Returns the new sorted array. + * @example + * + * var users = [ + * { 'user': 'fred', 'age': 48 }, + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 }, + * { 'user': 'barney', 'age': 34 } + * ]; + * + * _.sortBy(users, [function(o) { return o.user; }]); + * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]] + * + * _.sortBy(users, ['user', 'age']); + * // => objects for [['barney', 34], ['barney', 36], ['fred', 40], ['fred', 48]] + */ + function sortBy(collection, iteratee) { + var index = 0; + iteratee = baseIteratee(iteratee); + + return baseMap(baseMap(collection, function(value, key, collection) { + return { 'value': value, 'index': index++, 'criteria': iteratee(value, key, collection) }; + }).sort(function(object, other) { + return compareAscending(object.criteria, other.criteria) || (object.index - other.index); + }), baseProperty('value')); + } + + /*------------------------------------------------------------------------*/ + + /** + * Creates a function that invokes `func`, with the `this` binding and arguments + * of the created function, while it's called less than `n` times. Subsequent + * calls to the created function return the result of the last `func` invocation. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Function + * @param {number} n The number of calls at which `func` is no longer invoked. + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * jQuery(element).on('click', _.before(5, addContactToList)); + * // => Allows adding up to 4 contacts to the list. + */ + function before(n, func) { + var result; + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + n = toInteger(n); + return function() { + if (--n > 0) { + result = func.apply(this, arguments); + } + if (n <= 1) { + func = undefined; + } + return result; + }; + } + + /** + * Creates a function that invokes `func` with the `this` binding of `thisArg` + * and `partials` prepended to the arguments it receives. + * + * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds, + * may be used as a placeholder for partially applied arguments. + * + * **Note:** Unlike native `Function#bind`, this method doesn't set the "length" + * property of bound functions. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to bind. + * @param {*} thisArg The `this` binding of `func`. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new bound function. + * @example + * + * function greet(greeting, punctuation) { + * return greeting + ' ' + this.user + punctuation; + * } + * + * var object = { 'user': 'fred' }; + * + * var bound = _.bind(greet, object, 'hi'); + * bound('!'); + * // => 'hi fred!' + * + * // Bound with placeholders. + * var bound = _.bind(greet, object, _, '!'); + * bound('hi'); + * // => 'hi fred!' + */ + var bind = baseRest(function(func, thisArg, partials) { + return createPartial(func, WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG, thisArg, partials); + }); + + /** + * Defers invoking the `func` until the current call stack has cleared. Any + * additional arguments are provided to `func` when it's invoked. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to defer. + * @param {...*} [args] The arguments to invoke `func` with. + * @returns {number} Returns the timer id. + * @example + * + * _.defer(function(text) { + * console.log(text); + * }, 'deferred'); + * // => Logs 'deferred' after one millisecond. + */ + var defer = baseRest(function(func, args) { + return baseDelay(func, 1, args); + }); + + /** + * Invokes `func` after `wait` milliseconds. Any additional arguments are + * provided to `func` when it's invoked. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to delay. + * @param {number} wait The number of milliseconds to delay invocation. + * @param {...*} [args] The arguments to invoke `func` with. + * @returns {number} Returns the timer id. + * @example + * + * _.delay(function(text) { + * console.log(text); + * }, 1000, 'later'); + * // => Logs 'later' after one second. + */ + var delay = baseRest(function(func, wait, args) { + return baseDelay(func, toNumber(wait) || 0, args); + }); + + /** + * Creates a function that negates the result of the predicate `func`. The + * `func` predicate is invoked with the `this` binding and arguments of the + * created function. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Function + * @param {Function} predicate The predicate to negate. + * @returns {Function} Returns the new negated function. + * @example + * + * function isEven(n) { + * return n % 2 == 0; + * } + * + * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven)); + * // => [1, 3, 5] + */ + function negate(predicate) { + if (typeof predicate != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + return function() { + var args = arguments; + return !predicate.apply(this, args); + }; + } + + /** + * Creates a function that is restricted to invoking `func` once. Repeat calls + * to the function return the value of the first invocation. The `func` is + * invoked with the `this` binding and arguments of the created function. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * var initialize = _.once(createApplication); + * initialize(); + * initialize(); + * // => `createApplication` is invoked once + */ + function once(func) { + return before(2, func); + } + + /*------------------------------------------------------------------------*/ + + /** + * Creates a shallow clone of `value`. + * + * **Note:** This method is loosely based on the + * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm) + * and supports cloning arrays, array buffers, booleans, date objects, maps, + * numbers, `Object` objects, regexes, sets, strings, symbols, and typed + * arrays. The own enumerable properties of `arguments` objects are cloned + * as plain objects. An empty object is returned for uncloneable values such + * as error objects, functions, DOM nodes, and WeakMaps. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to clone. + * @returns {*} Returns the cloned value. + * @see _.cloneDeep + * @example + * + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var shallow = _.clone(objects); + * console.log(shallow[0] === objects[0]); + * // => true + */ + function clone(value) { + if (!isObject(value)) { + return value; + } + return isArray(value) ? copyArray(value) : copyObject(value, nativeKeys(value)); + } + + /** + * Performs a + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * comparison between two values to determine if they are equivalent. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.eq(object, object); + * // => true + * + * _.eq(object, other); + * // => false + * + * _.eq('a', 'a'); + * // => true + * + * _.eq('a', Object('a')); + * // => false + * + * _.eq(NaN, NaN); + * // => true + */ + function eq(value, other) { + return value === other || (value !== value && other !== other); + } + + /** + * Checks if `value` is likely an `arguments` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + * else `false`. + * @example + * + * _.isArguments(function() { return arguments; }()); + * // => true + * + * _.isArguments([1, 2, 3]); + * // => false + */ + var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { + return isObjectLike(value) && hasOwnProperty.call(value, 'callee') && + !propertyIsEnumerable.call(value, 'callee'); + }; + + /** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(document.body.children); + * // => false + * + * _.isArray('abc'); + * // => false + * + * _.isArray(_.noop); + * // => false + */ + var isArray = Array.isArray; + + /** + * Checks if `value` is array-like. A value is considered array-like if it's + * not a function and has a `value.length` that's an integer greater than or + * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is array-like, else `false`. + * @example + * + * _.isArrayLike([1, 2, 3]); + * // => true + * + * _.isArrayLike(document.body.children); + * // => true + * + * _.isArrayLike('abc'); + * // => true + * + * _.isArrayLike(_.noop); + * // => false + */ + function isArrayLike(value) { + return value != null && isLength(value.length) && !isFunction(value); + } + + /** + * Checks if `value` is classified as a boolean primitive or object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a boolean, else `false`. + * @example + * + * _.isBoolean(false); + * // => true + * + * _.isBoolean(null); + * // => false + */ + function isBoolean(value) { + return value === true || value === false || + (isObjectLike(value) && baseGetTag(value) == boolTag); + } + + /** + * Checks if `value` is classified as a `Date` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a date object, else `false`. + * @example + * + * _.isDate(new Date); + * // => true + * + * _.isDate('Mon April 23 2012'); + * // => false + */ + var isDate = baseIsDate; + + /** + * Checks if `value` is an empty object, collection, map, or set. + * + * Objects are considered empty if they have no own enumerable string keyed + * properties. + * + * Array-like values such as `arguments` objects, arrays, buffers, strings, or + * jQuery-like collections are considered empty if they have a `length` of `0`. + * Similarly, maps and sets are considered empty if they have a `size` of `0`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is empty, else `false`. + * @example + * + * _.isEmpty(null); + * // => true + * + * _.isEmpty(true); + * // => true + * + * _.isEmpty(1); + * // => true + * + * _.isEmpty([1, 2, 3]); + * // => false + * + * _.isEmpty({ 'a': 1 }); + * // => false + */ + function isEmpty(value) { + if (isArrayLike(value) && + (isArray(value) || isString(value) || + isFunction(value.splice) || isArguments(value))) { + return !value.length; + } + return !nativeKeys(value).length; + } + + /** + * Performs a deep comparison between two values to determine if they are + * equivalent. + * + * **Note:** This method supports comparing arrays, array buffers, booleans, + * date objects, error objects, maps, numbers, `Object` objects, regexes, + * sets, strings, symbols, and typed arrays. `Object` objects are compared + * by their own, not inherited, enumerable properties. Functions and DOM + * nodes are compared by strict equality, i.e. `===`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.isEqual(object, other); + * // => true + * + * object === other; + * // => false + */ + function isEqual(value, other) { + return baseIsEqual(value, other); + } + + /** + * Checks if `value` is a finite primitive number. + * + * **Note:** This method is based on + * [`Number.isFinite`](https://mdn.io/Number/isFinite). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a finite number, else `false`. + * @example + * + * _.isFinite(3); + * // => true + * + * _.isFinite(Number.MIN_VALUE); + * // => true + * + * _.isFinite(Infinity); + * // => false + * + * _.isFinite('3'); + * // => false + */ + function isFinite(value) { + return typeof value == 'number' && nativeIsFinite(value); + } + + /** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a function, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ + function isFunction(value) { + if (!isObject(value)) { + return false; + } + // The use of `Object#toString` avoids issues with the `typeof` operator + // in Safari 9 which returns 'object' for typed arrays and other constructors. + var tag = baseGetTag(value); + return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; + } + + /** + * Checks if `value` is a valid array-like length. + * + * **Note:** This method is loosely based on + * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. + * @example + * + * _.isLength(3); + * // => true + * + * _.isLength(Number.MIN_VALUE); + * // => false + * + * _.isLength(Infinity); + * // => false + * + * _.isLength('3'); + * // => false + */ + function isLength(value) { + return typeof value == 'number' && + value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; + } + + /** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ + function isObject(value) { + var type = typeof value; + return value != null && (type == 'object' || type == 'function'); + } + + /** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ + function isObjectLike(value) { + return value != null && typeof value == 'object'; + } + + /** + * Checks if `value` is `NaN`. + * + * **Note:** This method is based on + * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as + * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for + * `undefined` and other non-number values. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. + * @example + * + * _.isNaN(NaN); + * // => true + * + * _.isNaN(new Number(NaN)); + * // => true + * + * isNaN(undefined); + * // => true + * + * _.isNaN(undefined); + * // => false + */ + function isNaN(value) { + // An `NaN` primitive is the only value that is not equal to itself. + // Perform the `toStringTag` check first to avoid errors with some + // ActiveX objects in IE. + return isNumber(value) && value != +value; + } + + /** + * Checks if `value` is `null`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `null`, else `false`. + * @example + * + * _.isNull(null); + * // => true + * + * _.isNull(void 0); + * // => false + */ + function isNull(value) { + return value === null; + } + + /** + * Checks if `value` is classified as a `Number` primitive or object. + * + * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are + * classified as numbers, use the `_.isFinite` method. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a number, else `false`. + * @example + * + * _.isNumber(3); + * // => true + * + * _.isNumber(Number.MIN_VALUE); + * // => true + * + * _.isNumber(Infinity); + * // => true + * + * _.isNumber('3'); + * // => false + */ + function isNumber(value) { + return typeof value == 'number' || + (isObjectLike(value) && baseGetTag(value) == numberTag); + } + + /** + * Checks if `value` is classified as a `RegExp` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. + * @example + * + * _.isRegExp(/abc/); + * // => true + * + * _.isRegExp('/abc/'); + * // => false + */ + var isRegExp = baseIsRegExp; + + /** + * Checks if `value` is classified as a `String` primitive or object. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a string, else `false`. + * @example + * + * _.isString('abc'); + * // => true + * + * _.isString(1); + * // => false + */ + function isString(value) { + return typeof value == 'string' || + (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag); + } + + /** + * Checks if `value` is `undefined`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. + * @example + * + * _.isUndefined(void 0); + * // => true + * + * _.isUndefined(null); + * // => false + */ + function isUndefined(value) { + return value === undefined; + } + + /** + * Converts `value` to an array. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to convert. + * @returns {Array} Returns the converted array. + * @example + * + * _.toArray({ 'a': 1, 'b': 2 }); + * // => [1, 2] + * + * _.toArray('abc'); + * // => ['a', 'b', 'c'] + * + * _.toArray(1); + * // => [] + * + * _.toArray(null); + * // => [] + */ + function toArray(value) { + if (!isArrayLike(value)) { + return values(value); + } + return value.length ? copyArray(value) : []; + } + + /** + * Converts `value` to an integer. + * + * **Note:** This method is loosely based on + * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toInteger(3.2); + * // => 3 + * + * _.toInteger(Number.MIN_VALUE); + * // => 0 + * + * _.toInteger(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toInteger('3.2'); + * // => 3 + */ + var toInteger = Number; + + /** + * Converts `value` to a number. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {number} Returns the number. + * @example + * + * _.toNumber(3.2); + * // => 3.2 + * + * _.toNumber(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toNumber(Infinity); + * // => Infinity + * + * _.toNumber('3.2'); + * // => 3.2 + */ + var toNumber = Number; + + /** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ + function toString(value) { + if (typeof value == 'string') { + return value; + } + return value == null ? '' : (value + ''); + } + + /*------------------------------------------------------------------------*/ + + /** + * Assigns own enumerable string keyed properties of source objects to the + * destination object. Source objects are applied from left to right. + * Subsequent sources overwrite property assignments of previous sources. + * + * **Note:** This method mutates `object` and is loosely based on + * [`Object.assign`](https://mdn.io/Object/assign). + * + * @static + * @memberOf _ + * @since 0.10.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.assignIn + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * function Bar() { + * this.c = 3; + * } + * + * Foo.prototype.b = 2; + * Bar.prototype.d = 4; + * + * _.assign({ 'a': 0 }, new Foo, new Bar); + * // => { 'a': 1, 'c': 3 } + */ + var assign = createAssigner(function(object, source) { + copyObject(source, nativeKeys(source), object); + }); + + /** + * This method is like `_.assign` except that it iterates over own and + * inherited source properties. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @alias extend + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.assign + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * function Bar() { + * this.c = 3; + * } + * + * Foo.prototype.b = 2; + * Bar.prototype.d = 4; + * + * _.assignIn({ 'a': 0 }, new Foo, new Bar); + * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 } + */ + var assignIn = createAssigner(function(object, source) { + copyObject(source, nativeKeysIn(source), object); + }); + + /** + * Creates an object that inherits from the `prototype` object. If a + * `properties` object is given, its own enumerable string keyed properties + * are assigned to the created object. + * + * @static + * @memberOf _ + * @since 2.3.0 + * @category Object + * @param {Object} prototype The object to inherit from. + * @param {Object} [properties] The properties to assign to the object. + * @returns {Object} Returns the new object. + * @example + * + * function Shape() { + * this.x = 0; + * this.y = 0; + * } + * + * function Circle() { + * Shape.call(this); + * } + * + * Circle.prototype = _.create(Shape.prototype, { + * 'constructor': Circle + * }); + * + * var circle = new Circle; + * circle instanceof Circle; + * // => true + * + * circle instanceof Shape; + * // => true + */ + function create(prototype, properties) { + var result = baseCreate(prototype); + return properties == null ? result : assign(result, properties); + } + + /** + * Assigns own and inherited enumerable string keyed properties of source + * objects to the destination object for all destination properties that + * resolve to `undefined`. Source objects are applied from left to right. + * Once a property is set, additional values of the same property are ignored. + * + * **Note:** This method mutates `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.defaultsDeep + * @example + * + * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); + * // => { 'a': 1, 'b': 2 } + */ + var defaults = baseRest(function(object, sources) { + object = Object(object); + + var index = -1; + var length = sources.length; + var guard = length > 2 ? sources[2] : undefined; + + if (guard && isIterateeCall(sources[0], sources[1], guard)) { + length = 1; + } + + while (++index < length) { + var source = sources[index]; + var props = keysIn(source); + var propsIndex = -1; + var propsLength = props.length; + + while (++propsIndex < propsLength) { + var key = props[propsIndex]; + var value = object[key]; + + if (value === undefined || + (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) { + object[key] = source[key]; + } + } + } + + return object; + }); + + /** + * Checks if `path` is a direct property of `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = { 'a': { 'b': 2 } }; + * var other = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.has(object, 'a'); + * // => true + * + * _.has(object, 'a.b'); + * // => true + * + * _.has(object, ['a', 'b']); + * // => true + * + * _.has(other, 'a'); + * // => false + */ + function has(object, path) { + return object != null && hasOwnProperty.call(object, path); + } + + /** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * for more details. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ + var keys = nativeKeys; + + /** + * Creates an array of the own and inherited enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keysIn(new Foo); + * // => ['a', 'b', 'c'] (iteration order is not guaranteed) + */ + var keysIn = nativeKeysIn; + + /** + * Creates an object composed of the picked `object` properties. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The source object. + * @param {...(string|string[])} [paths] The property paths to pick. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.pick(object, ['a', 'c']); + * // => { 'a': 1, 'c': 3 } + */ + var pick = flatRest(function(object, paths) { + return object == null ? {} : basePick(object, paths); + }); + + /** + * This method is like `_.get` except that if the resolved value is a + * function it's invoked with the `this` binding of its parent object and + * its result is returned. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to resolve. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] }; + * + * _.result(object, 'a[0].b.c1'); + * // => 3 + * + * _.result(object, 'a[0].b.c2'); + * // => 4 + * + * _.result(object, 'a[0].b.c3', 'default'); + * // => 'default' + * + * _.result(object, 'a[0].b.c3', _.constant('default')); + * // => 'default' + */ + function result(object, path, defaultValue) { + var value = object == null ? undefined : object[path]; + if (value === undefined) { + value = defaultValue; + } + return isFunction(value) ? value.call(object) : value; + } + + /** + * Creates an array of the own enumerable string keyed property values of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property values. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.values(new Foo); + * // => [1, 2] (iteration order is not guaranteed) + * + * _.values('hi'); + * // => ['h', 'i'] + */ + function values(object) { + return object == null ? [] : baseValues(object, keys(object)); + } + + /*------------------------------------------------------------------------*/ + + /** + * Converts the characters "&", "<", ">", '"', and "'" in `string` to their + * corresponding HTML entities. + * + * **Note:** No other characters are escaped. To escape additional + * characters use a third-party library like [_he_](https://mths.be/he). + * + * Though the ">" character is escaped for symmetry, characters like + * ">" and "/" don't need escaping in HTML and have no special meaning + * unless they're part of a tag or unquoted attribute value. See + * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands) + * (under "semi-related fun fact") for more details. + * + * When working with HTML you should always + * [quote attribute values](http://wonko.com/post/html-escaping) to reduce + * XSS vectors. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category String + * @param {string} [string=''] The string to escape. + * @returns {string} Returns the escaped string. + * @example + * + * _.escape('fred, barney, & pebbles'); + * // => 'fred, barney, & pebbles' + */ + function escape(string) { + string = toString(string); + return (string && reHasUnescapedHtml.test(string)) + ? string.replace(reUnescapedHtml, escapeHtmlChar) + : string; + } + + /*------------------------------------------------------------------------*/ + + /** + * This method returns the first argument it receives. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {*} value Any value. + * @returns {*} Returns `value`. + * @example + * + * var object = { 'a': 1 }; + * + * console.log(_.identity(object) === object); + * // => true + */ + function identity(value) { + return value; + } + + /** + * Creates a function that invokes `func` with the arguments of the created + * function. If `func` is a property name, the created function returns the + * property value for a given element. If `func` is an array or object, the + * created function returns `true` for elements that contain the equivalent + * source properties, otherwise it returns `false`. + * + * @static + * @since 4.0.0 + * @memberOf _ + * @category Util + * @param {*} [func=_.identity] The value to convert to a callback. + * @returns {Function} Returns the callback. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * // The `_.matches` iteratee shorthand. + * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true })); + * // => [{ 'user': 'barney', 'age': 36, 'active': true }] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.filter(users, _.iteratee(['user', 'fred'])); + * // => [{ 'user': 'fred', 'age': 40 }] + * + * // The `_.property` iteratee shorthand. + * _.map(users, _.iteratee('user')); + * // => ['barney', 'fred'] + * + * // Create custom iteratee shorthands. + * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) { + * return !_.isRegExp(func) ? iteratee(func) : function(string) { + * return func.test(string); + * }; + * }); + * + * _.filter(['abc', 'def'], /ef/); + * // => ['def'] + */ + var iteratee = baseIteratee; + + /** + * Creates a function that performs a partial deep comparison between a given + * object and `source`, returning `true` if the given object has equivalent + * property values, else `false`. + * + * **Note:** The created function is equivalent to `_.isMatch` with `source` + * partially applied. + * + * Partial comparisons will match empty array and empty object `source` + * values against any array or object value, respectively. See `_.isEqual` + * for a list of supported value comparisons. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Util + * @param {Object} source The object of property values to match. + * @returns {Function} Returns the new spec function. + * @example + * + * var objects = [ + * { 'a': 1, 'b': 2, 'c': 3 }, + * { 'a': 4, 'b': 5, 'c': 6 } + * ]; + * + * _.filter(objects, _.matches({ 'a': 4, 'c': 6 })); + * // => [{ 'a': 4, 'b': 5, 'c': 6 }] + */ + function matches(source) { + return baseMatches(assign({}, source)); + } + + /** + * Adds all own enumerable string keyed function properties of a source + * object to the destination object. If `object` is a function, then methods + * are added to its prototype as well. + * + * **Note:** Use `_.runInContext` to create a pristine `lodash` function to + * avoid conflicts caused by modifying the original. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {Function|Object} [object=lodash] The destination object. + * @param {Object} source The object of functions to add. + * @param {Object} [options={}] The options object. + * @param {boolean} [options.chain=true] Specify whether mixins are chainable. + * @returns {Function|Object} Returns `object`. + * @example + * + * function vowels(string) { + * return _.filter(string, function(v) { + * return /[aeiou]/i.test(v); + * }); + * } + * + * _.mixin({ 'vowels': vowels }); + * _.vowels('fred'); + * // => ['e'] + * + * _('fred').vowels().value(); + * // => ['e'] + * + * _.mixin({ 'vowels': vowels }, { 'chain': false }); + * _('fred').vowels(); + * // => ['e'] + */ + function mixin(object, source, options) { + var props = keys(source), + methodNames = baseFunctions(source, props); + + if (options == null && + !(isObject(source) && (methodNames.length || !props.length))) { + options = source; + source = object; + object = this; + methodNames = baseFunctions(source, keys(source)); + } + var chain = !(isObject(options) && 'chain' in options) || !!options.chain, + isFunc = isFunction(object); + + baseEach(methodNames, function(methodName) { + var func = source[methodName]; + object[methodName] = func; + if (isFunc) { + object.prototype[methodName] = function() { + var chainAll = this.__chain__; + if (chain || chainAll) { + var result = object(this.__wrapped__), + actions = result.__actions__ = copyArray(this.__actions__); + + actions.push({ 'func': func, 'args': arguments, 'thisArg': object }); + result.__chain__ = chainAll; + return result; + } + return func.apply(object, arrayPush([this.value()], arguments)); + }; + } + }); + + return object; + } + + /** + * Reverts the `_` variable to its previous value and returns a reference to + * the `lodash` function. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @returns {Function} Returns the `lodash` function. + * @example + * + * var lodash = _.noConflict(); + */ + function noConflict() { + if (root._ === this) { + root._ = oldDash; + } + return this; + } + + /** + * This method returns `undefined`. + * + * @static + * @memberOf _ + * @since 2.3.0 + * @category Util + * @example + * + * _.times(2, _.noop); + * // => [undefined, undefined] + */ + function noop() { + // No operation performed. + } + + /** + * Generates a unique ID. If `prefix` is given, the ID is appended to it. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {string} [prefix=''] The value to prefix the ID with. + * @returns {string} Returns the unique ID. + * @example + * + * _.uniqueId('contact_'); + * // => 'contact_104' + * + * _.uniqueId(); + * // => '105' + */ + function uniqueId(prefix) { + var id = ++idCounter; + return toString(prefix) + id; + } + + /*------------------------------------------------------------------------*/ + + /** + * Computes the maximum value of `array`. If `array` is empty or falsey, + * `undefined` is returned. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Math + * @param {Array} array The array to iterate over. + * @returns {*} Returns the maximum value. + * @example + * + * _.max([4, 2, 8, 6]); + * // => 8 + * + * _.max([]); + * // => undefined + */ + function max(array) { + return (array && array.length) + ? baseExtremum(array, identity, baseGt) + : undefined; + } + + /** + * Computes the minimum value of `array`. If `array` is empty or falsey, + * `undefined` is returned. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Math + * @param {Array} array The array to iterate over. + * @returns {*} Returns the minimum value. + * @example + * + * _.min([4, 2, 8, 6]); + * // => 2 + * + * _.min([]); + * // => undefined + */ + function min(array) { + return (array && array.length) + ? baseExtremum(array, identity, baseLt) + : undefined; + } + + /*------------------------------------------------------------------------*/ + + // Add methods that return wrapped values in chain sequences. + lodash.assignIn = assignIn; + lodash.before = before; + lodash.bind = bind; + lodash.chain = chain; + lodash.compact = compact; + lodash.concat = concat; + lodash.create = create; + lodash.defaults = defaults; + lodash.defer = defer; + lodash.delay = delay; + lodash.filter = filter; + lodash.flatten = flatten; + lodash.flattenDeep = flattenDeep; + lodash.iteratee = iteratee; + lodash.keys = keys; + lodash.map = map; + lodash.matches = matches; + lodash.mixin = mixin; + lodash.negate = negate; + lodash.once = once; + lodash.pick = pick; + lodash.slice = slice; + lodash.sortBy = sortBy; + lodash.tap = tap; + lodash.thru = thru; + lodash.toArray = toArray; + lodash.values = values; + + // Add aliases. + lodash.extend = assignIn; + + // Add methods to `lodash.prototype`. + mixin(lodash, lodash); + + /*------------------------------------------------------------------------*/ + + // Add methods that return unwrapped values in chain sequences. + lodash.clone = clone; + lodash.escape = escape; + lodash.every = every; + lodash.find = find; + lodash.forEach = forEach; + lodash.has = has; + lodash.head = head; + lodash.identity = identity; + lodash.indexOf = indexOf; + lodash.isArguments = isArguments; + lodash.isArray = isArray; + lodash.isBoolean = isBoolean; + lodash.isDate = isDate; + lodash.isEmpty = isEmpty; + lodash.isEqual = isEqual; + lodash.isFinite = isFinite; + lodash.isFunction = isFunction; + lodash.isNaN = isNaN; + lodash.isNull = isNull; + lodash.isNumber = isNumber; + lodash.isObject = isObject; + lodash.isRegExp = isRegExp; + lodash.isString = isString; + lodash.isUndefined = isUndefined; + lodash.last = last; + lodash.max = max; + lodash.min = min; + lodash.noConflict = noConflict; + lodash.noop = noop; + lodash.reduce = reduce; + lodash.result = result; + lodash.size = size; + lodash.some = some; + lodash.uniqueId = uniqueId; + + // Add aliases. + lodash.each = forEach; + lodash.first = head; + + mixin(lodash, (function() { + var source = {}; + baseForOwn(lodash, function(func, methodName) { + if (!hasOwnProperty.call(lodash.prototype, methodName)) { + source[methodName] = func; + } + }); + return source; + }()), { 'chain': false }); + + /*------------------------------------------------------------------------*/ + + /** + * The semantic version number. + * + * @static + * @memberOf _ + * @type {string} + */ + lodash.VERSION = VERSION; + + // Add `Array` methods to `lodash.prototype`. + baseEach(['pop', 'join', 'replace', 'reverse', 'split', 'push', 'shift', 'sort', 'splice', 'unshift'], function(methodName) { + var func = (/^(?:replace|split)$/.test(methodName) ? String.prototype : arrayProto)[methodName], + chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru', + retUnwrapped = /^(?:pop|join|replace|shift)$/.test(methodName); + + lodash.prototype[methodName] = function() { + var args = arguments; + if (retUnwrapped && !this.__chain__) { + var value = this.value(); + return func.apply(isArray(value) ? value : [], args); + } + return this[chainName](function(value) { + return func.apply(isArray(value) ? value : [], args); + }); + }; + }); + + // Add chain sequence methods to the `lodash` wrapper. + lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue; + + /*--------------------------------------------------------------------------*/ + + // Some AMD build optimizers, like r.js, check for condition patterns like: + if (true) { + // Expose Lodash on the global object to prevent errors when Lodash is + // loaded by a script tag in the presence of an AMD loader. + // See http://requirejs.org/docs/errors.html#mismatch for more details. + // Use `_.noConflict` to remove Lodash from the global object. + root._ = lodash; + + // Define as an anonymous module so, through path mapping, it can be + // referenced as the "underscore" module. + !(__WEBPACK_AMD_DEFINE_RESULT__ = function() { + return lodash; + }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); + } + // Check for `exports` after `define` in case a build optimizer adds it. + else if (freeModule) { + // Export for Node.js. + (freeModule.exports = lodash)._ = lodash; + // Export for CommonJS support. + freeExports._ = lodash; + } + else { + // Export to the global object. + root._ = lodash; + } + }.call(this)); + + /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }()), __webpack_require__(59)(module))) + +/***/ }), +/* 59 */ +/***/ (function(module, exports) { + + module.exports = function(module) { + if(!module.webpackPolyfill) { + module.deprecate = function() {}; + module.paths = []; + // module.parent = undefined by default + module.children = []; + module.webpackPolyfill = 1; + } + return module; + } + + +/***/ }), +/* 60 */ +/***/ (function(module, exports, __webpack_require__) { + + var ArrowLink = __webpack_require__(61); + var BoxArrowLink = __webpack_require__(22); + var PlainLink = __webpack_require__(23); + var OwlDisjointWith = __webpack_require__(46); + var SetOperatorProperty = __webpack_require__(56); + + /** + * Stores the passed properties in links. + * @returns {Function} + */ + module.exports = (function (){ + var linkCreator = {}; + + /** + * Creates links from the passed properties. + * @param properties + */ + linkCreator.createLinks = function ( properties ){ + var links = groupPropertiesToLinks(properties); + + for ( var i = 0, l = links.length; i < l; i++ ) { + var link = links[i]; + + countAndSetLayers(link, links); + countAndSetLoops(link, links); + } + + return links; + }; + + /** + * Creates links of properties and - if existing - their inverses. + * @param properties the properties + * @returns {Array} + */ + function groupPropertiesToLinks( properties ){ + var links = [], + property, + addedProperties = __webpack_require__(62)(); + + for ( var i = 0, l = properties.length; i < l; i++ ) { + property = properties[i]; + + if ( !addedProperties.has(property) ) { + var link = createLink(property); + + property.link(link); + if ( property.inverse() ) { + property.inverse().link(link); + } + + links.push(link); + + addedProperties.add(property); + if ( property.inverse() ) { + addedProperties.add(property.inverse()); + } + } + } + + return links; + } + + function countAndSetLayers( link, allLinks ){ + var layer, + layers, + i, l; + + if ( typeof link.layers() === "undefined" ) { + layers = []; + + // Search for other links that are another layer + for ( i = 0, l = allLinks.length; i < l; i++ ) { + var otherLink = allLinks[i]; + if ( link.domain() === otherLink.domain() && link.range() === otherLink.range() || + link.domain() === otherLink.range() && link.range() === otherLink.domain() ) { + layers.push(otherLink); + } + } + + // Set the results on each of the layers + for ( i = 0, l = layers.length; i < l; ++i ) { + layer = layers[i]; + + layer.layerIndex(i); + layer.layers(layers); + } + } + } + + function countAndSetLoops( link, allLinks ){ + var loop, + loops, + i, l; + + if ( typeof link.loops() === "undefined" ) { + loops = []; + + // Search for other links that are also loops of the same node + for ( i = 0, l = allLinks.length; i < l; i++ ) { + var otherLink = allLinks[i]; + if ( link.domain() === otherLink.domain() && link.domain() === otherLink.range() ) { + loops.push(otherLink); + } + } + + // Set the results on each of the loops + for ( i = 0, l = loops.length; i < l; ++i ) { + loop = loops[i]; + + loop.loopIndex(i); + loop.loops(loops); + } + } + } + + function createLink( property ){ + var domain = property.domain(); + var range = property.range(); + + if ( property instanceof OwlDisjointWith ) { + return new PlainLink(domain, range, property); + } else if ( property instanceof SetOperatorProperty ) { + return new BoxArrowLink(domain, range, property); + } + return new ArrowLink(domain, range, property); + } + + return function (){ + // Return a function to keep module interfaces consistent + return linkCreator; + }; + })(); + + +/***/ }), +/* 61 */ +/***/ (function(module, exports, __webpack_require__) { + + var PlainLink = __webpack_require__(23); + + + module.exports = ArrowLink; + + function ArrowLink( domain, range, property ){ + PlainLink.apply(this, arguments); + } + + ArrowLink.prototype = Object.create(PlainLink.prototype); + ArrowLink.prototype.constructor = ArrowLink; + + + ArrowLink.prototype.draw = function ( linkGroup, markerContainer ){ + var property = this.label().property(); + var inverse = this.label().inverse(); + + createPropertyMarker(markerContainer, property); + if ( inverse ) { + createInverseMarker(markerContainer, inverse); + } + + PlainLink.prototype.draw.apply(this, arguments); + + // attach the markers to the link + linkGroup.attr("marker-end", "url(#" + property.markerId() + ")"); + if ( inverse ) { + linkGroup.attr("marker-start", "url(#" + inverse.markerId() + ")"); + } + }; + + function createPropertyMarker( markerContainer, property ){ + var marker = appendBasicMarker(markerContainer, property); + //marker.attr("refX", 12); + var m1X = -12; + var m1Y = 8; + var m2X = -12; + var m2Y = -8; + marker.append("path") + //.attr("d", "M0,-8L12,0L0,8Z") + .attr("d", "M0,0L " + m1X + "," + m1Y + "L" + m2X + "," + m2Y + "L" + 0 + "," + 0) + .classed(property.markerType(), true); + + property.markerElement(marker); + } + + function createInverseMarker( markerContainer, inverse ){ + var m1X = -12; + var m1Y = 8; + var m2X = -12; + var m2Y = -8; + var inverseMarker = appendBasicMarker(markerContainer, inverse); + inverseMarker.append("path") + //.attr("d", "M12,-8L0,0L12,8Z") + .attr("d", "M0,0L " + -m1X + "," + -m1Y + "L" + -m2X + "," + -m2Y + "L" + 0 + "," + 0) + .classed(inverse.markerType(), true); + + inverse.markerElement(inverseMarker); + } + + function appendBasicMarker( markerContainer, property ){ + return markerContainer.append("marker") + .datum(property) + .attr("id", property.markerId()) + + .attr("viewBox", "-14 -10 28 20") + .attr("markerWidth", 10) + .attr("markerHeight", 10) + //.attr("markerUnits", "userSpaceOnUse") + .attr("orient", "auto"); + } + + +/***/ }), +/* 62 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {/** + * A simple incomplete encapsulation of the d3 set, which is able to store webvowl + * elements by using their id. + */ + module.exports = function ( array ){ + + var set = {}, + d3Set = d3.set(array); + + set.has = function ( webvowlElement ){ + return d3Set.has(webvowlElement.id()); + }; + + set.add = function ( webvowlElement ){ + return d3Set.add(webvowlElement.id()); + }; + + set.remove = function ( webvowlElement ){ + return d3Set.remove(webvowlElement.id()); + }; + + set.empty = function (){ + return d3Set.empty(); + }; + + set.size = function (){ + return d3Set.size(); + }; + + return set; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), +/* 63 */ +/***/ (function(module, exports, __webpack_require__) { + + var BaseProperty = __webpack_require__(42); + var BaseNode = __webpack_require__(9); + var DatatypeNode = __webpack_require__(35); + var Thing = __webpack_require__(31); + var ObjectProperty = __webpack_require__(50); + var DatatypeProperty = __webpack_require__(44); + var RdfsSubClassOf = __webpack_require__(55); + var Label = __webpack_require__(24); + + + var tools = {}; + module.exports = function (){ + return tools; + }; + + tools.isLabel = function ( element ){ + return element instanceof Label; + }; + + tools.isNode = function ( element ){ + return element instanceof BaseNode; + }; + + tools.isDatatype = function ( node ){ + return node instanceof DatatypeNode; + }; + + tools.isThing = function ( node ){ + return node instanceof Thing; + }; + + tools.isProperty = function ( element ){ + return element instanceof BaseProperty; + }; + + tools.isObjectProperty = function ( element ){ + return element instanceof ObjectProperty; + }; + + tools.isDatatypeProperty = function ( element ){ + return element instanceof DatatypeProperty; + }; + + tools.isRdfsSubClassOf = function ( property ){ + return property instanceof RdfsSubClassOf; + }; + + +/***/ }), +/* 64 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {module.exports = function (){ + var options = {}, + data, + graphContainerSelector, + classDistance = 200, + datatypeDistance = 120, + loopDistance = 150, + charge = -500, + gravity = 0.025, + linkStrength = 1, + height = 600, + width = 800, + selectionModules = [], + filterModules = [], + minMagnification = 0.01, + maxMagnification = 4, + compactNotation = false, + dynamicLabelWidth = true, + // some filters + literalFilter, + // menus + gravityMenu, + filterMenu, + loadingModule, + modeMenu, + pausedMenu, + pickAndPinModule, + resetMenu, + searchMenu, + ontologyMenu, + sidebar, + leftSidebar, + editSidebar, + navigationMenu, + exportMenu, + graphObject, + zoomSlider, + datatypeFilter, + focuserModule, + colorExternalsModule, + compactNotationModule, + objectPropertyFilter, + subclassFilter, + setOperatorFilter, + maxLabelWidth = 120, + metadataObject = {}, + generalOntologyMetaData = {}, + disjointPropertyFilter, + rectangularRep = false, + warningModule, + prefixModule, + drawPropertyDraggerOnHover = true, + showDraggerObject = false, + directInputModule, + scaleNodesByIndividuals = true, + useAccuracyHelper = true, + showRenderingStatistic = true, + showInputModality = false, + hideDebugOptions = true, + nodeDegreeFilter, + debugMenu, + + supportedDatatypes = ["rdfs:Literal", "xsd:boolean", "xsd:double", "xsd:integer", "xsd:string", "undefined"], + supportedClasses = ["owl:Thing", "owl:Class", "owl:DeprecatedClass"], + supportedProperties = ["owl:objectProperty", + "rdfs:subClassOf", + "owl:disjointWith", + "owl:allValuesFrom", + "owl:someValuesFrom" + ], + prefixList = { + rdf: 'http://www.w3.org/1999/02/22-rdf-syntax-ns#', + rdfs: 'http://www.w3.org/2000/01/rdf-schema#', + owl: 'http://www.w3.org/2002/07/owl#', + xsd: 'http://www.w3.org/2001/XMLSchema#', + dc: 'http://purl.org/dc/elements/1.1/#', + xml: 'http://www.w3.org/XML/1998/namespace' + }; + + options.clearMetaObject = function (){ + generalOntologyMetaData = {}; + }; + options.clearGeneralMetaObject = function (){ + generalOntologyMetaData = {}; + }; + + options.debugMenu = function ( val ){ + if ( !arguments.length ) return debugMenu; + debugMenu = val; + }; + + options.getHideDebugFeatures = function (){ + return hideDebugOptions; + }; + options.executeHiddenDebugFeatuers = function (){ + hideDebugOptions = !hideDebugOptions; + d3.selectAll(".debugOption").classed("hidden", hideDebugOptions); + if ( hideDebugOptions === false ) { + graphObject.setForceTickFunctionWithFPS(); + } + else { + graphObject.setDefaultForceTickFunction(); + } + if ( debugMenu ) { + debugMenu.updateSettings(); + } + options.setHideDebugFeaturesForDefaultObject(hideDebugOptions); + }; + + + options.addOrUpdateGeneralObjectEntry = function ( property, value ){ + if ( generalOntologyMetaData.hasOwnProperty(property) ) { + //console.log("Updating Property:"+ property); + if ( property === "iri" ) { + if ( validURL(value) === false ) { + warningModule.showWarning("Invalid Ontology IRI", "Input IRI does not represent an URL", "Restoring previous IRI for ontology", 1, false); + return false; + } + } + generalOntologyMetaData[property] = value; + } else { + generalOntologyMetaData[property] = value; + } + return true; + }; + + options.getGeneralMetaObjectProperty = function ( property ){ + if ( generalOntologyMetaData.hasOwnProperty(property) ) { + return generalOntologyMetaData[property]; + } + }; + + options.getGeneralMetaObject = function (){ + return generalOntologyMetaData; + }; + + options.addOrUpdateMetaObjectEntry = function ( property, value ){ + + if ( metadataObject.hasOwnProperty(property) ) { + metadataObject[property] = value; + } else { + metadataObject[property] = value; + } + }; + + options.getMetaObjectProperty = function ( property ){ + if ( metadataObject.hasOwnProperty(property) ) { + return metadataObject[property]; + } + }; + options.getMetaObject = function (){ + return metadataObject; + }; + + + options.prefixList = function (){ + return prefixList; + }; + options.addPrefix = function ( prefix, url ){ + prefixList[prefix] = url; + }; + + function validURL( str ){ + var urlregex = /^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/; + return urlregex.test(str); + } + + options.updatePrefix = function ( oldPrefix, newPrefix, oldURL, newURL ){ + if ( oldPrefix === newPrefix && oldURL === newURL ) { + // console.log("Nothing to update"); + return true; + } + if ( oldPrefix === newPrefix && oldURL !== newURL && validURL(newURL) === true ) { + // console.log("Update URL"); + prefixList[oldPrefix] = newURL; + } else if ( oldPrefix === newPrefix && oldURL !== newURL && validURL(newURL) === false ) { + if ( validURL(newURL) === false ) { + warningModule.showWarning("Invalid Prefix IRI", "Input IRI does not represent an IRI", "You should enter a valid IRI in form of a URL", 1, false); + return false; + } + + return false; + } + if ( oldPrefix !== newPrefix && validURL(newURL) === true ) { + + // sanity check + if ( prefixList.hasOwnProperty(newPrefix) ) { + // console.log("Already have this prefix!"); + warningModule.showWarning("Prefix Already Exist", "Prefix: " + newPrefix + " is already defined", "You should use an other one", 1, false); + return false; + } + options.removePrefix(oldPrefix); + options.addPrefix(newPrefix, newURL); + editSidebar.updateEditDeleteButtonIds(oldPrefix, newPrefix); + return true; + } + + // console.log("Is new URL ("+newURL+") valid? >> "+validURL(newURL)); + if ( validURL(newURL) === false ) { + warningModule.showWarning("Invalid Prefix IRI", "Input IRI does not represent an URL", "You should enter a valid URL", 1, false); + + } + return false; + }; + + options.removePrefix = function ( prefix ){ + delete prefixList[prefix]; + }; + + + options.supportedDatatypes = function (){ + return supportedDatatypes; + }; + options.supportedClasses = function (){ + return supportedClasses; + }; + options.supportedProperties = function (){ + return supportedProperties; + }; + + options.datatypeFilter = function ( val ){ + if ( !arguments.length ) return datatypeFilter; + datatypeFilter = val; + }; + + options.showDraggerObject = function ( val ){ + if ( !arguments.length ) { + return showDraggerObject; + } + showDraggerObject = val; + }; + options.useAccuracyHelper = function ( val ){ + if ( !arguments.length ) { + return useAccuracyHelper; + } + useAccuracyHelper = val; + }; + options.showAccuracyHelper = function ( val ){ + if ( !arguments.length ) { + return options.showDraggerObject(); + } + options.showDraggerObject(val); + }; + options.showRenderingStatistic = function ( val ){ + if ( !arguments.length ) { + return showRenderingStatistic; + } + showRenderingStatistic = val; + }; + options.showInputModality = function ( val ){ + if ( !arguments.length ) { + return showInputModality; + } + showInputModality = val; + }; + + options.drawPropertyDraggerOnHover = function ( val ){ + if ( !arguments.length ) return drawPropertyDraggerOnHover; + drawPropertyDraggerOnHover = val; + }; + + options.warningModule = function ( val ){ + if ( !arguments.length ) return warningModule; + warningModule = val; + }; + options.directInputModule = function ( val ){ + if ( !arguments.length ) return directInputModule; + directInputModule = val; + }; + options.prefixModule = function ( val ){ + if ( !arguments.length ) return prefixModule; + prefixModule = val; + }; + + options.focuserModule = function ( val ){ + if ( !arguments.length ) return focuserModule; + focuserModule = val; + }; + options.colorExternalsModule = function ( val ){ + if ( !arguments.length ) return colorExternalsModule; + colorExternalsModule = val; + }; + options.compactNotationModule = function ( val ){ + if ( !arguments.length ) return compactNotationModule; + compactNotationModule = val; + }; + + options.maxLabelWidth = function ( val ){ + if ( !arguments.length ) return maxLabelWidth; + maxLabelWidth = val; + }; + options.objectPropertyFilter = function ( val ){ + if ( !arguments.length ) return objectPropertyFilter; + objectPropertyFilter = val; + }; + options.disjointPropertyFilter = function ( val ){ + if ( !arguments.length ) return disjointPropertyFilter; + disjointPropertyFilter = val; + }; + options.subclassFilter = function ( val ){ + if ( !arguments.length ) return subclassFilter; + subclassFilter = val; + }; + options.setOperatorFilter = function ( val ){ + if ( !arguments.length ) return setOperatorFilter; + setOperatorFilter = val; + }; + options.leftSidebar = function ( val ){ + if ( !arguments.length ) return leftSidebar; + leftSidebar = val; + }; + options.editSidebar = function ( val ){ + if ( !arguments.length ) return editSidebar; + editSidebar = val; + }; + + options.zoomSlider = function ( val ){ + if ( !arguments.length ) return zoomSlider; + zoomSlider = val; + }; + + options.graphObject = function ( val ){ + if ( !arguments.length ) return graphObject; + graphObject = val; + }; + + + var defaultOptionsConfig = {}; + defaultOptionsConfig.sidebar = "1"; + defaultOptionsConfig.doc = -1; + defaultOptionsConfig.cd = 200; + defaultOptionsConfig.dd = 120; + defaultOptionsConfig.editorMode = "false"; + defaultOptionsConfig.filter_datatypes = "false"; + defaultOptionsConfig.filter_objectProperties = "false"; + defaultOptionsConfig.filter_sco = "false"; + defaultOptionsConfig.filter_disjoint = "true"; + defaultOptionsConfig.filter_setOperator = "false"; + defaultOptionsConfig.mode_dynamic = "true"; + defaultOptionsConfig.mode_scaling = "true"; + defaultOptionsConfig.mode_compact = "false"; + defaultOptionsConfig.mode_colorExt = "true"; + defaultOptionsConfig.mode_multiColor = "false"; + defaultOptionsConfig.debugFeatures = "false"; + defaultOptionsConfig.rect = 0; + + + options.initialConfig = function (){ + var initCfg = {}; + initCfg.sidebar = "1"; + initCfg.doc = -1; + initCfg.cd = 200; + initCfg.dd = 120; + initCfg.editorMode = "false"; + initCfg.filter_datatypes = "false"; + initCfg.filter_objectProperties = "false"; + initCfg.filter_sco = "false"; + initCfg.filter_disjoint = "true"; + initCfg.filter_setOperator = "false"; + initCfg.mode_dynamic = "true"; + initCfg.mode_scaling = "true"; + initCfg.mode_compact = "false"; + initCfg.mode_colorExt = "true"; + initCfg.mode_multiColor = "false"; + initCfg.mode_pnp = "false"; + initCfg.debugFeatures = "false"; + initCfg.rect = 0; + return initCfg; + }; + + options.setEditorModeForDefaultObject = function ( val ){ + defaultOptionsConfig.editorMode = String(val); + }; + options.setHideDebugFeaturesForDefaultObject = function ( val ){ + defaultOptionsConfig.debugFeatures = String(!val); + }; + + function updateConfigObject(){ + defaultOptionsConfig.sidebar = options.sidebar().getSidebarVisibility(); + defaultOptionsConfig.cd = options.classDistance(); + defaultOptionsConfig.dd = options.datatypeDistance(); + defaultOptionsConfig.filter_datatypes = String(options.filterMenu().getCheckBoxValue("datatypeFilterCheckbox")); + defaultOptionsConfig.filter_sco = String(options.filterMenu().getCheckBoxValue("subclassFilterCheckbox")); + defaultOptionsConfig.filter_disjoint = String(options.filterMenu().getCheckBoxValue("disjointFilterCheckbox")); + defaultOptionsConfig.filter_setOperator = String(options.filterMenu().getCheckBoxValue("setoperatorFilterCheckbox")); + defaultOptionsConfig.filter_objectProperties = String(options.filterMenu().getCheckBoxValue("objectPropertyFilterCheckbox")); + defaultOptionsConfig.mode_dynamic = String(options.dynamicLabelWidth()); + defaultOptionsConfig.mode_scaling = String(options.modeMenu().getCheckBoxValue("nodescalingModuleCheckbox")); + defaultOptionsConfig.mode_compact = String(options.modeMenu().getCheckBoxValue("compactnotationModuleCheckbox")); + defaultOptionsConfig.mode_colorExt = String(options.modeMenu().getCheckBoxValue("colorexternalsModuleCheckbox")); + defaultOptionsConfig.mode_multiColor = String(options.modeMenu().colorModeState()); + defaultOptionsConfig.mode_pnp = String(options.modeMenu().getCheckBoxValue("pickandpinModuleCheckbox")); + defaultOptionsConfig.rect = 0; + } + + options.defaultConfig = function (){ + updateConfigObject(); + return defaultOptionsConfig; + }; + + options.exportMenu = function ( val ){ + if ( !arguments.length ) return exportMenu; + exportMenu = val; + }; + + options.rectangularRepresentation = function ( val ){ + if ( !arguments.length ) { + return rectangularRep; + } else { + var intVal = parseInt(val); + if ( intVal === 0 ) { + rectangularRep = false; + } else { + rectangularRep = true; + } + } + }; + + options.dynamicLabelWidth = function ( val ){ + if ( !arguments.length ) + return dynamicLabelWidth; + else { + dynamicLabelWidth = val; + } + }; + options.sidebar = function ( s ){ + if ( !arguments.length ) return sidebar; + sidebar = s; + return options; + + }; + + options.navigationMenu = function ( m ){ + if ( !arguments.length ) return navigationMenu; + navigationMenu = m; + return options; + + }; + + options.ontologyMenu = function ( m ){ + if ( !arguments.length ) return ontologyMenu; + ontologyMenu = m; + return options; + }; + + options.searchMenu = function ( m ){ + if ( !arguments.length ) return searchMenu; + searchMenu = m; + return options; + }; + + options.resetMenu = function ( m ){ + if ( !arguments.length ) return resetMenu; + resetMenu = m; + return options; + }; + + options.pausedMenu = function ( m ){ + if ( !arguments.length ) return pausedMenu; + pausedMenu = m; + return options; + }; + + options.pickAndPinModule = function ( m ){ + if ( !arguments.length ) return pickAndPinModule; + pickAndPinModule = m; + return options; + }; + + options.gravityMenu = function ( m ){ + if ( !arguments.length ) return gravityMenu; + gravityMenu = m; + return options; + }; + + options.filterMenu = function ( m ){ + if ( !arguments.length ) return filterMenu; + filterMenu = m; + return options; + }; + + options.modeMenu = function ( m ){ + if ( !arguments.length ) return modeMenu; + modeMenu = m; + return options; + }; + + options.charge = function ( p ){ + if ( !arguments.length ) return charge; + charge = +p; + return options; + }; + + options.classDistance = function ( p ){ + if ( !arguments.length ) return classDistance; + classDistance = +p; + return options; + }; + + options.compactNotation = function ( p ){ + + if ( !arguments.length ) return compactNotation; + compactNotation = p; + return options; + }; + + options.data = function ( p ){ + if ( !arguments.length ) return data; + data = p; + return options; + }; + + options.datatypeDistance = function ( p ){ + if ( !arguments.length ) return datatypeDistance; + datatypeDistance = +p; + return options; + }; + + options.filterModules = function ( p ){ + if ( !arguments.length ) return filterModules; + filterModules = p; + return options; + }; + + options.graphContainerSelector = function ( p ){ + if ( !arguments.length ) return graphContainerSelector; + graphContainerSelector = p; + return options; + }; + + options.gravity = function ( p ){ + if ( !arguments.length ) return gravity; + gravity = +p; + return options; + }; + + options.height = function ( p ){ + if ( !arguments.length ) return height; + height = +p; + return options; + }; + + options.linkStrength = function ( p ){ + if ( !arguments.length ) return linkStrength; + linkStrength = +p; + return options; + }; + + options.loopDistance = function ( p ){ + if ( !arguments.length ) return loopDistance; + loopDistance = p; + return options; + }; + + options.minMagnification = function ( p ){ + if ( !arguments.length ) return minMagnification; + minMagnification = +p; + return options; + }; + + options.maxMagnification = function ( p ){ + if ( !arguments.length ) return maxMagnification; + maxMagnification = +p; + return options; + }; + + options.scaleNodesByIndividuals = function ( p ){ + if ( !arguments.length ) return scaleNodesByIndividuals; + scaleNodesByIndividuals = p; + return options; + }; + + options.selectionModules = function ( p ){ + if ( !arguments.length ) return selectionModules; + selectionModules = p; + return options; + }; + + options.width = function ( p ){ + if ( !arguments.length ) return width; + width = +p; + return options; + }; + + options.literalFilter = function ( p ){ + if ( !arguments.length ) return literalFilter; + literalFilter = p; + return options; + }; + options.nodeDegreeFilter = function ( p ){ + if ( !arguments.length ) return nodeDegreeFilter; + nodeDegreeFilter = p; + return options; + }; + + options.loadingModule = function ( p ){ + if ( !arguments.length ) return loadingModule; + loadingModule = p; + return options; + }; + + // define url loadable options; + // update all set values in the default object + options.setOptionsFromURL = function ( opts, changeEditFlag ){ + if ( opts.sidebar !== undefined ) sidebar.showSidebar(parseInt(opts.sidebar), true); + if ( opts.doc ) { + var asInt = parseInt(opts.doc); + filterMenu.setDegreeSliderValue(asInt); + graphObject.setGlobalDOF(asInt); + // reset the value to be -1; + defaultOptionsConfig.doc = -1; + } + var settingFlag = false; + if ( opts.editorMode ) { + if ( opts.editorMode === "true" ) settingFlag = true; + d3.select("#editorModeModuleCheckbox").node().checked = settingFlag; + + if ( changeEditFlag && changeEditFlag === true ) { + graphObject.editorMode(settingFlag); + } + + // update config object + defaultOptionsConfig.editorMode = opts.editorMode; + + } + if ( opts.cd ) { // class distance + options.classDistance(opts.cd); // class distance + defaultOptionsConfig.cd = opts.cd; + } + if ( opts.dd ) { // data distance + options.datatypeDistance(opts.dd); + defaultOptionsConfig.cd = opts.cd; + } + if ( opts.cd || opts.dd ) options.gravityMenu().reset(); // reset the values so the slider is updated; + + + settingFlag = false; + if ( opts.filter_datatypes ) { + if ( opts.filter_datatypes === "true" ) settingFlag = true; + filterMenu.setCheckBoxValue("datatypeFilterCheckbox", settingFlag); + defaultOptionsConfig.filter_datatypes = opts.filter_datatypes; + } + if ( opts.debugFeatures ) { + if ( opts.debugFeatures === "true" ) settingFlag = true; + hideDebugOptions = settingFlag; + if ( options.getHideDebugFeatures() === false ) { + options.executeHiddenDebugFeatuers(); + } + defaultOptionsConfig.debugFeatures = opts.debugFeatures; + } + + settingFlag = false; + if ( opts.filter_objectProperties ) { + if ( opts.filter_objectProperties === "true" ) settingFlag = true; + filterMenu.setCheckBoxValue("objectPropertyFilterCheckbox", settingFlag); + defaultOptionsConfig.filter_objectProperties = opts.filter_objectProperties; + } + settingFlag = false; + if ( opts.filter_sco ) { + if ( opts.filter_sco === "true" ) settingFlag = true; + filterMenu.setCheckBoxValue("subclassFilterCheckbox", settingFlag); + defaultOptionsConfig.filter_sco = opts.filter_sco; + } + settingFlag = false; + if ( opts.filter_disjoint ) { + if ( opts.filter_disjoint === "true" ) settingFlag = true; + filterMenu.setCheckBoxValue("disjointFilterCheckbox", settingFlag); + defaultOptionsConfig.filter_disjoint = opts.filter_disjoint; + } + settingFlag = false; + if ( opts.filter_setOperator ) { + if ( opts.filter_setOperator === "true" ) settingFlag = true; + filterMenu.setCheckBoxValue("setoperatorFilterCheckbox", settingFlag); + defaultOptionsConfig.filter_setOperator = opts.filter_setOperator; + } + filterMenu.updateSettings(); + + // modesMenu + settingFlag = false; + if ( opts.mode_dynamic ) { + if ( opts.mode_dynamic === "true" ) settingFlag = true; + modeMenu.setDynamicLabelWidth(settingFlag); + dynamicLabelWidth = settingFlag; + defaultOptionsConfig.mode_dynamic = opts.mode_dynamic; + } + // settingFlag=false; + // THIS SHOULD NOT BE SET USING THE OPTIONS ON THE URL + // if (opts.mode_picnpin) { + // graph.options().filterMenu().setCheckBoxValue("pickandpin ModuleCheckbox", settingFlag); + // } + + settingFlag = false; + if ( opts.mode_pnp ) { + if ( opts.mode_pnp === "true" ) settingFlag = true; + modeMenu.setCheckBoxValue("pickandpinModuleCheckbox", settingFlag); + defaultOptionsConfig.mode_pnp = opts.mode_pnp; + } + + settingFlag = false; + if ( opts.mode_scaling ) { + if ( opts.mode_scaling === "true" ) settingFlag = true; + modeMenu.setCheckBoxValue("nodescalingModuleCheckbox", settingFlag); + defaultOptionsConfig.mode_scaling = opts.mode_scaling; + } + + settingFlag = false; + if ( opts.mode_compact ) { + if ( opts.mode_compact === "true" ) settingFlag = true; + modeMenu.setCheckBoxValue("compactnotationModuleCheckbox", settingFlag); + defaultOptionsConfig.mode_compact = opts.mode_compact; + } + + settingFlag = false; + if ( opts.mode_colorExt ) { + if ( opts.mode_colorExt === "true" ) settingFlag = true; + modeMenu.setCheckBoxValue("colorexternalsModuleCheckbox", settingFlag); + defaultOptionsConfig.mode_colorExt = opts.mode_colorExt; + } + + settingFlag = false; + if ( opts.mode_multiColor ) { + if ( opts.mode_multiColor === "true" ) settingFlag = true; + modeMenu.setColorSwitchStateUsingURL(settingFlag); + defaultOptionsConfig.mode_multiColor = opts.mode_multiColor; + } + modeMenu.updateSettingsUsingURL(); + options.rectangularRepresentation(opts.rect); + }; + + return options; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), +/* 65 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {var OwlDisjointWith = __webpack_require__(46); + var attributeParser = __webpack_require__(66)(); + var equivalentPropertyMerger = __webpack_require__(67)(); + var nodePrototypeMap = __webpack_require__(5)(); + var propertyPrototypeMap = __webpack_require__(40)(); + + /** + * Encapsulates the parsing and preparation logic of the input data. + * @param graph the graph object that will be passed to the elements + * @returns {{}} + */ + module.exports = function ( graph ){ + var parser = {}, + nodes, + properties, + classMap, + settingsData, + settingsImported = false, + settingsImportGraphZoomAndTranslation = false, + dictionary = [], + propertyMap; + + parser.getDictionary = function (){ + return dictionary; + }; + + parser.setDictionary = function ( d ){ + dictionary = d; + }; + + parser.settingsImported = function (){ + return settingsImported; + }; + parser.settingsImportGraphZoomAndTranslation = function (){ + return settingsImportGraphZoomAndTranslation; + }; + + parser.parseSettings = function (){ + settingsImported = true; + settingsImportGraphZoomAndTranslation = false; + + if ( !settingsData ) { + settingsImported = false; + return; + } + /** global settings **********************************************************/ + if ( settingsData.global ) { + if ( settingsData.global.zoom ) { + var zoomFactor = settingsData.global.zoom; + graph.setZoom(zoomFactor); + settingsImportGraphZoomAndTranslation = true; + } + + if ( settingsData.global.translation ) { + var translation = settingsData.global.translation; + graph.setTranslation(translation); + settingsImportGraphZoomAndTranslation = true; + } + + if ( settingsData.global.paused ) { + var paused = settingsData.global.paused; + graph.options().pausedMenu().setPauseValue(paused); + } + } + /** Gravity Settings **********************************************************/ + if ( settingsData.gravity ) { + if ( settingsData.gravity.classDistance ) { + var classDistance = settingsData.gravity.classDistance; + graph.options().classDistance(classDistance); + } + if ( settingsData.gravity.datatypeDistance ) { + var datatypeDistance = settingsData.gravity.datatypeDistance; + graph.options().datatypeDistance(datatypeDistance); + } + graph.options().gravityMenu().reset(); // reads the options values and sets the gui values + } + + + // shared variable declaration + + var i; + var id; + var checked; + /** Filter Settings **********************************************************/ + if ( settingsData.filter ) { + // checkbox settings + if ( settingsData.filter.checkBox ) { + var filter_cb = settingsData.filter.checkBox; + for ( i = 0; i < filter_cb.length; i++ ) { + id = filter_cb[i].id; + checked = filter_cb[i].checked; + graph.options().filterMenu().setCheckBoxValue(id, checked); + } + } + // node degree filter settings + if ( settingsData.filter.degreeSliderValue ) { + var degreeSliderValue = settingsData.filter.degreeSliderValue; + graph.options().filterMenu().setDegreeSliderValue(degreeSliderValue); + } + graph.options().filterMenu().updateSettings(); + } + + /** Modes Setting **********************************************************/ + if ( settingsData.modes ) { + // checkbox settings + if ( settingsData.modes.checkBox ) { + var modes_cb = settingsData.modes.checkBox; + for ( i = 0; i < modes_cb.length; i++ ) { + id = modes_cb[i].id; + checked = modes_cb[i].checked; + graph.options().modeMenu().setCheckBoxValue(id, checked); + } + } + // color switch settings + var state = settingsData.modes.colorSwitchState; + // state could be undefined + if ( state === true || state === false ) { + graph.options().modeMenu().setColorSwitchState(state); + } + graph.options().modeMenu().updateSettings(); + } + graph.updateStyle(); // updates graph representation(setting charges and distances) + }; + + + /** + * Parses the ontology data and preprocesses it (e.g. connecting inverse properties and so on). + * @param ontologyData the loaded ontology json file + */ + parser.parse = function ( ontologyData ){ + if ( !ontologyData ) { + nodes = []; + properties = []; + dictionary = []; + return; + } + dictionary = []; + if ( ontologyData.settings ) settingsData = ontologyData.settings; + else settingsData = undefined; + + var classes = combineClasses(ontologyData.class, ontologyData.classAttribute), + datatypes = combineClasses(ontologyData.datatype, ontologyData.datatypeAttribute), + combinedClassesAndDatatypes = classes.concat(datatypes), + unparsedProperties = ontologyData.property || [], + combinedProperties; + + // Inject properties for unions, intersections, ... + addSetOperatorProperties(combinedClassesAndDatatypes, unparsedProperties); + combinedProperties = combineProperties(unparsedProperties, ontologyData.propertyAttribute); + classMap = mapElements(combinedClassesAndDatatypes); + propertyMap = mapElements(combinedProperties); + mergeRangesOfEquivalentProperties(combinedProperties, combinedClassesAndDatatypes); + + // Process the graph data + convertTypesToIris(combinedClassesAndDatatypes, ontologyData.namespace); + convertTypesToIris(combinedProperties, ontologyData.namespace); + nodes = createNodeStructure(combinedClassesAndDatatypes, classMap); + properties = createPropertyStructure(combinedProperties, classMap, propertyMap); + }; + + /** + * @return {Array} the preprocessed nodes + */ + parser.nodes = function (){ + return nodes; + }; + + /** + * @returns {Array} the preprocessed properties + */ + parser.properties = function (){ + return properties; + }; + + /** + * Combines the passed objects with its attributes and prototypes. This also applies + * attributes defined in the base of the prototype. + */ + function combineClasses( baseObjects, attributes ){ + var combinations = []; + var prototypeMap = createLowerCasePrototypeMap(nodePrototypeMap); + + if ( baseObjects ) { + baseObjects.forEach(function ( element ){ + var matchingAttribute; + + if ( attributes ) { + // Look for an attribute with the same id and merge them + for ( var i = 0; i < attributes.length; i++ ) { + var attribute = attributes[i]; + if ( element.id === attribute.id ) { + matchingAttribute = attribute; + break; + } + } + addAdditionalAttributes(element, matchingAttribute); + } + + // Then look for a prototype to add its properties + var Prototype = prototypeMap.get(element.type.toLowerCase()); + + if ( Prototype ) { + addAdditionalAttributes(element, Prototype); // TODO might be unnecessary + + var node = new Prototype(graph); + node.annotations(element.annotations) + .baseIri(element.baseIri) + .comment(element.comment) + .complement(element.complement) + .disjointUnion(element.disjointUnion) + .description(element.description) + .equivalents(element.equivalent) + .id(element.id) + .intersection(element.intersection) + .label(element.label) + // .type(element.type) Ignore, because we predefined it + .union(element.union) + .iri(element.iri); + if ( element.pos ) { + node.x = element.pos[0]; + node.y = element.pos[1]; + node.px = node.x; + node.py = node.y; + } + //class element pin + var elementPinned = element.pinned; + if ( elementPinned === true ) { + node.pinned(true); + graph.options().pickAndPinModule().addPinnedElement(node); + } + // Create node objects for all individuals + if ( element.individuals ) { + element.individuals.forEach(function ( individual ){ + var individualNode = new Prototype(graph); + individualNode.label(individual.labels) + .iri(individual.iri); + + node.individuals().push(individualNode); + }); + } + + if ( element.attributes ) { + var deduplicatedAttributes = d3.set(element.attributes.concat(node.attributes())); + node.attributes(deduplicatedAttributes.values()); + } + combinations.push(node); + } else { + console.error("Unknown element type: " + element.type); + } + }); + } + + return combinations; + } + + function combineProperties( baseObjects, attributes ){ + var combinations = []; + var prototypeMap = createLowerCasePrototypeMap(propertyPrototypeMap); + + if ( baseObjects ) { + baseObjects.forEach(function ( element ){ + var matchingAttribute; + + if ( attributes ) { + // Look for an attribute with the same id and merge them + for ( var i = 0; i < attributes.length; i++ ) { + var attribute = attributes[i]; + if ( element.id === attribute.id ) { + matchingAttribute = attribute; + break; + } + } + addAdditionalAttributes(element, matchingAttribute); + } + + // Then look for a prototype to add its properties + var Prototype = prototypeMap.get(element.type.toLowerCase()); + + if ( Prototype ) { + // Create the matching object and set the properties + var property = new Prototype(graph); + property.annotations(element.annotations) + .baseIri(element.baseIri) + .cardinality(element.cardinality) + .comment(element.comment) + .domain(element.domain) + .description(element.description) + .equivalents(element.equivalent) + .id(element.id) + .inverse(element.inverse) + .label(element.label) + .minCardinality(element.minCardinality) + .maxCardinality(element.maxCardinality) + .range(element.range) + .subproperties(element.subproperty) + .superproperties(element.superproperty) + // .type(element.type) Ignore, because we predefined it + .iri(element.iri); + + // adding property position + if ( element.pos ) { + property.x = element.pos[0]; + property.y = element.pos[1]; + property.px = element.pos[0]; + property.py = element.pos[1]; + } + var elementPinned = element.pinned; + if ( elementPinned === true ) { + property.pinned(true); + graph.options().pickAndPinModule().addPinnedElement(property); + } + + + if ( element.attributes ) { + var deduplicatedAttributes = d3.set(element.attributes.concat(property.attributes())); + property.attributes(deduplicatedAttributes.values()); + } + combinations.push(property); + } else { + console.error("Unknown element type: " + element.type); + } + + }); + } + + return combinations; + } + + function createLowerCasePrototypeMap( prototypeMap ){ + return d3.map(prototypeMap.values(), function ( Prototype ){ + return new Prototype().type().toLowerCase(); + }); + } + + function mergeRangesOfEquivalentProperties( properties, nodes ){ + // pass clones of arrays into the merger to keep the current functionality of this module + var newNodes = equivalentPropertyMerger.merge(properties.slice(), nodes.slice(), propertyMap, classMap, graph); + + // replace all the existing nodes and map the nodes again + nodes.length = 0; + Array.prototype.push.apply(nodes, newNodes); + classMap = mapElements(nodes); + } + + /** + * Checks all attributes which have to be rewritten. + * For example: + * equivalent is filled with only ID's of the corresponding nodes. It would be better to used the + * object instead of the ID so we swap the ID's with the correct object reference and can delete it from drawing + * because it is not necessary. + */ + function createNodeStructure( rawNodes, classMap ){ + var nodes = []; + + // Set the default values + var maxIndividualCount = 0; + rawNodes.forEach(function ( node ){ + maxIndividualCount = Math.max(maxIndividualCount, node.individuals().length); + node.visible(true); + }); + + rawNodes.forEach(function ( node ){ + // Merge and connect the equivalent nodes + processEquivalentIds(node, classMap); + + attributeParser.parseClassAttributes(node); + + node.maxIndividualCount(maxIndividualCount); + }); + + // Collect all nodes that should be displayed + rawNodes.forEach(function ( node ){ + if ( node.visible() ) { + nodes.push(node); + } + }); + + return nodes; + } + + /** + * Sets the disjoint attribute of the nodes if a disjoint label is found. + * @param property + */ + function processDisjoints( property ){ + if ( property instanceof OwlDisjointWith === false ) { + return; + } + + var domain = property.domain(), + range = property.range(); + + // Check the domain. + if ( !domain.disjointWith() ) { + domain.disjointWith([]); + } + + // Check the range. + if ( !range.disjointWith() ) { + range.disjointWith([]); + } + + domain.disjointWith().push(property.range()); + range.disjointWith().push(property.domain()); + } + + /** + * Connect all properties and also their sub- and superproperties. + * We iterate over the rawProperties array because it is way faster than iterating + * over an object and its attributes. + * + * @param rawProperties the properties + * @param classMap a map of all classes + * @param propertyMap the properties in a map + */ + function createPropertyStructure( rawProperties, classMap, propertyMap ){ + var properties = []; + // Set default values + rawProperties.forEach(function ( property ){ + property.visible(true); + }); + + // Connect properties + rawProperties.forEach(function ( property ){ + var domain, + range, + domainObject, + rangeObject, + inverse; + + /* Skip properties that have no information about their domain and range, like + inverse properties with optional inverse and optional domain and range attributes */ + if ( (property.domain() && property.range()) || property.inverse() ) { + + var inversePropertyId = findId(property.inverse()); + // Look if an inverse property exists + if ( inversePropertyId ) { + inverse = propertyMap[inversePropertyId]; + if ( !inverse ) { + console.warn("No inverse property was found for id: " + inversePropertyId); + property.inverse(undefined); + } + } + + // Either domain and range are set on this property or at the inverse + if ( typeof property.domain() !== "undefined" && typeof property.range() !== "undefined" ) { + domain = findId(property.domain()); + range = findId(property.range()); + + domainObject = classMap[domain]; + rangeObject = classMap[range]; + } else if ( inverse ) { + // Domain and range need to be switched + domain = findId(inverse.range()); + range = findId(inverse.domain()); + + domainObject = classMap[domain]; + rangeObject = classMap[range]; + } else { + console.warn("Domain and range not found for property: " + property.id()); + } + + // Set the references on this property + property.domain(domainObject); + property.range(rangeObject); + + // Also set the attributes of the inverse property + if ( inverse ) { + property.inverse(inverse); + inverse.inverse(property); + + // Switch domain and range + inverse.domain(rangeObject); + inverse.range(domainObject); + } + } + // Reference sub- and superproperties + referenceSubOrSuperProperties(property.subproperties()); + referenceSubOrSuperProperties(property.superproperties()); + }); + + // Merge equivalent properties and process disjoints. + rawProperties.forEach(function ( property ){ + processEquivalentIds(property, propertyMap); + processDisjoints(property); + + attributeParser.parsePropertyAttributes(property); + }); + // Add additional information to the properties + rawProperties.forEach(function ( property ){ + // Properties of merged classes should point to/from the visible equivalent class + var propertyWasRerouted = false; + + if ( property.domain() === undefined ) { + console.warn("No Domain was found for id:" + property.id()); + return; + } + + if ( wasNodeMerged(property.domain()) ) { + property.domain(property.domain().equivalentBase()); + propertyWasRerouted = true; + } + if ( property.range() === undefined ) { + console.warn("No range was found for id:" + property.id()); + return; + } + if ( wasNodeMerged(property.range()) ) { + property.range(property.range().equivalentBase()); + propertyWasRerouted = true; + } + // But there should not be two equal properties between the same domain and range + var equalProperty = getOtherEqualProperty(rawProperties, property); + + if ( propertyWasRerouted && equalProperty ) { + property.visible(false); + + equalProperty.redundantProperties().push(property); + } + + // Hide property if source or target node is hidden + if ( !property.domain().visible() || !property.range().visible() ) { + property.visible(false); + } + + // Collect all properties that should be displayed + if ( property.visible() ) { + properties.push(property); + } + }); + return properties; + } + + function referenceSubOrSuperProperties( subOrSuperPropertiesArray ){ + var i, l; + + if ( !subOrSuperPropertiesArray ) { + return; + } + + for ( i = 0, l = subOrSuperPropertiesArray.length; i < l; ++i ) { + var subOrSuperPropertyId = findId(subOrSuperPropertiesArray[i]); + var subOrSuperProperty = propertyMap[subOrSuperPropertyId]; + + if ( subOrSuperProperty ) { + // Replace id with object + subOrSuperPropertiesArray[i] = subOrSuperProperty; + } else { + console.warn("No sub-/superproperty was found for id: " + subOrSuperPropertyId); + } + } + } + + function wasNodeMerged( node ){ + return !node.visible() && node.equivalentBase(); + } + + function getOtherEqualProperty( properties, referenceProperty ){ + var i, l, property; + + for ( i = 0, l = properties.length; i < l; i++ ) { + property = properties[i]; + + if ( referenceProperty === property ) { + continue; + } + if ( referenceProperty.domain() !== property.domain() || + referenceProperty.range() !== property.range() ) { + continue; + } + + // Check for an equal IRI, if non existent compare label and type + if ( referenceProperty.iri() && property.iri() ) { + if ( referenceProperty.iri() === property.iri() ) { + return property; + } + } else if ( referenceProperty.type() === property.type() && + referenceProperty.defaultLabel() === property.defaultLabel() ) { + return property; + } + } + + return undefined; + } + + /** + * Generates and adds properties for links to set operators. + * @param classes unprocessed classes + * @param properties unprocessed properties + */ + function addSetOperatorProperties( classes, properties ){ + function addProperties( domainId, rangeIds, operatorType ){ + if ( !rangeIds ) { + return; + } + + rangeIds.forEach(function ( rangeId, index ){ + var property = { + id: "GENERATED-" + operatorType + "-" + domainId + "-" + rangeId + "-" + index, + type: "setOperatorProperty", + domain: domainId, + range: rangeId + }; + + properties.push(property); + }); + } + + classes.forEach(function ( clss ){ + addProperties(clss.id(), clss.complement(), "COMPLEMENT"); + addProperties(clss.id(), clss.intersection(), "INTERSECTION"); + addProperties(clss.id(), clss.union(), "UNION"); + addProperties(clss.id(), clss.disjointUnion(), "DISJOINTUNION"); + }); + } + + /** + * Replaces the ids of equivalent nodes/properties with the matching objects, cross references them + * and tags them as processed. + * @param element a node or a property + * @param elementMap a map where nodes/properties can be looked up + */ + function processEquivalentIds( element, elementMap ){ + var eqIds = element.equivalents(); + + if ( !eqIds || element.equivalentBase() ) { + return; + } + + // Replace ids with the corresponding objects + for ( var i = 0, l = eqIds.length; i < l; ++i ) { + var eqId = findId(eqIds[i]); + var eqObject = elementMap[eqId]; + + if ( eqObject ) { + // Cross reference both objects + eqObject.equivalents(eqObject.equivalents()); + eqObject.equivalents().push(element); + eqObject.equivalentBase(element); + eqIds[i] = eqObject; + + // Hide other equivalent nodes + eqObject.visible(false); + } else { + console.warn("No class/property was found for equivalent id: " + eqId); + } + } + } + + /** + * Tries to convert the type to an iri and sets it. + * @param elements classes or properties + * @param namespaces an array of namespaces + */ + function convertTypesToIris( elements, namespaces ){ + elements.forEach(function ( element ){ + if ( typeof element.iri() === "string" ) { + element.iri(replaceNamespace(element.iri(), namespaces)); + } + }); + } + + /** + * Creates a map by mapping the array with the passed function. + * @param array the array + * @returns {{}} + */ + function mapElements( array ){ + var map = {}; + for ( var i = 0, length = array.length; i < length; i++ ) { + var element = array[i]; + map[element.id()] = element; + } + return map; + } + + /** + * Adds the attributes of the additional object to the base object, but doesn't + * overwrite existing ones. + * + * @param base the base object + * @param addition the object with additional data + * @returns the combination is also returned + */ + function addAdditionalAttributes( base, addition ){ + // Check for an undefined value + addition = addition || {}; + + for ( var addAttribute in addition ) { + // Add the attribute if it doesn't exist + if ( !(addAttribute in base) && addition.hasOwnProperty(addAttribute) ) { + base[addAttribute] = addition[addAttribute]; + } + } + return base; + } + + /** + * Replaces the namespace (and the separator) if one exists and returns the new value. + * @param address the address with a namespace in it + * @param namespaces an array of namespaces + * @returns {string} the processed address with the (possibly) replaced namespace + */ + function replaceNamespace( address, namespaces ){ + var separatorIndex = address.indexOf(":"); + if ( separatorIndex === -1 ) { + return address; + } + var namespaceName = address.substring(0, separatorIndex); + + for ( var i = 0, length = namespaces.length; i < length; ++i ) { + var namespace = namespaces[i]; + if ( namespaceName === namespace.name ) { + return namespace.iri + address.substring(separatorIndex + 1); + } + } + + return address; + } + + /** + * Looks whether the passed object is already the id or if it was replaced + * with the object that belongs to the id. + * @param object an id, a class or a property + * @returns {string} the id of the passed object or undefined + */ + function findId( object ){ + if ( !object ) { + return undefined; + } else if ( typeof object === "string" ) { + return object; + } else if ( "id" in object ) { + return object.id(); + } else { + console.warn("No Id was found for this object: " + object); + return undefined; + } + } + + return parser; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), +/* 66 */ +/***/ (function(module, exports) { + + /** + * Parses the attributes an element has and sets the corresponding attributes. + * @returns {Function} + */ + module.exports = (function (){ + var attributeParser = {}, + // Style + ANONYMOUS = "anonymous", + DATATYPE = "datatype", + DEPRECATED = "deprecated", + EXTERNAL = "external", + OBJECT = "object", + RDF = "rdf", + // Representations + ASYMMETRIC = "asymmetric", + FUNCTIONAL = "functional", + INVERSE_FUNCTIONAL = "inverse functional", + IRREFLEXIVE = "irreflexive", + KEY = "key", + REFLEXIVE = "reflexive", + SYMMETRIC = "symmetric", + TRANSITIVE = "transitive", + // Attribute groups + VISUAL_ATTRIBUTE_GROUPS = [ + [DEPRECATED, DATATYPE, OBJECT, RDF], + [ANONYMOUS] + ], + CLASS_INDICATIONS = [DEPRECATED, EXTERNAL], + PROPERTY_INDICATIONS = [ASYMMETRIC, FUNCTIONAL, INVERSE_FUNCTIONAL, IRREFLEXIVE, KEY, REFLEXIVE, SYMMETRIC, + TRANSITIVE]; + + /** + * Parses and sets the attributes of a class. + * @param clazz + */ + attributeParser.parseClassAttributes = function ( clazz ){ + if ( !(clazz.attributes() instanceof Array) ) { + return; + } + + parseVisualAttributes(clazz); + parseClassIndications(clazz); + }; + + function parseVisualAttributes( element ){ + VISUAL_ATTRIBUTE_GROUPS.forEach(function ( attributeGroup ){ + setVisualAttributeOfGroup(element, attributeGroup); + }); + } + + function setVisualAttributeOfGroup( element, group ){ + var i, l, attribute; + + for ( i = 0, l = group.length; i < l; i++ ) { + attribute = group[i]; + if ( element.attributes().indexOf(attribute) >= 0 ) { + element.visualAttributes().push(attribute); + + // Just a single attribute is possible + break; + } + } + } + + function parseClassIndications( clazz ){ + var i, l, indication; + + for ( i = 0, l = CLASS_INDICATIONS.length; i < l; i++ ) { + indication = CLASS_INDICATIONS[i]; + + if ( clazz.attributes().indexOf(indication) >= 0 ) { + clazz.indications().push(indication); + } + } + } + + /** + * Parses and sets the attributes of a property. + * @param property + */ + attributeParser.parsePropertyAttributes = function ( property ){ + if ( !(property.attributes() instanceof Array) ) { + return; + } + + parseVisualAttributes(property); + parsePropertyIndications(property); + }; + + function parsePropertyIndications( property ){ + var i, l, indication; + + for ( i = 0, l = PROPERTY_INDICATIONS.length; i < l; i++ ) { + indication = PROPERTY_INDICATIONS[i]; + + if ( property.attributes().indexOf(indication) >= 0 ) { + property.indications().push(indication); + } + } + } + + + return function (){ + // Return a function to keep module interfaces consistent + return attributeParser; + }; + })(); + + +/***/ }), +/* 67 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {var OwlThing = __webpack_require__(31); + var RdfsLiteral = __webpack_require__(38); + var elementTools = __webpack_require__(63)(); + + var equivalentPropertyMerger = {}; + module.exports = function (){ + return equivalentPropertyMerger; + }; + + var PREFIX = "GENERATED-MERGED_RANGE-"; + var OBJECT_PROPERTY_DEFAULT_RANGE_TYPE = "owl:Thing"; + var DATA_PROPERTY_DEFAULT_RANGE_TYPE = "rdfs:Literal"; + + + equivalentPropertyMerger.merge = function ( properties, nodes, propertyMap, nodeMap, graph ){ + var totalNodeIdsToHide = d3.set(); + var processedPropertyIds = d3.set(); + var mergeNodes = []; + + for ( var i = 0; i < properties.length; i++ ) { + var property = properties[i]; + var equivalents = property.equivalents().map(createIdToPropertyMapper(propertyMap)); + + if ( equivalents.length === 0 || processedPropertyIds.has(property.id()) ) { + continue; + } + + var propertyWithEquivalents = equivalents.concat(property); + + var mergeNode = findMergeNode(propertyWithEquivalents, nodeMap); + if ( !mergeNode ) { + if ( mergeNode !== undefined ) { + mergeNode = createDefaultMergeNode(property, graph); + mergeNodes.push(mergeNode); + } + } + + var nodeIdsToHide = replaceRangesAndCollectNodesToHide(propertyWithEquivalents, mergeNode, properties, + processedPropertyIds); + for ( var j = 0; j < nodeIdsToHide.length; j++ ) { + totalNodeIdsToHide.add(nodeIdsToHide[j]); + } + } + + return filterVisibleNodes(nodes.concat(mergeNodes), totalNodeIdsToHide); + }; + + + function createIdToPropertyMapper( propertyMap ){ + return function ( id ){ + return propertyMap[id]; + }; + } + + function findMergeNode( propertyWithEquivalents, nodeMap ){ + var typeMap = mapPropertiesRangesToType(propertyWithEquivalents, nodeMap); + var typeSet = d3.set(typeMap.keys()); + + // default types are the fallback values and should be ignored for the type determination + typeSet.remove(OBJECT_PROPERTY_DEFAULT_RANGE_TYPE); + typeSet.remove(DATA_PROPERTY_DEFAULT_RANGE_TYPE); + + // exactly one type to chose from -> take the node of this type as range + if ( typeSet.size() === 1 ) { + var type = typeSet.values()[0]; + var ranges = typeMap.get(type); + + if ( ranges.length === 1 ) { + return ranges[0]; + } + } + } + + function mapPropertiesRangesToType( properties, nodeMap ){ + var typeMap = d3.map(); + + properties.forEach(function ( property ){ + if ( property === undefined ) //@ WORKAROUND + return; + + var range = nodeMap[property.range()]; + var type = range.type(); + + if ( !typeMap.has(type) ) { + typeMap.set(type, []); + } + + typeMap.get(type).push(range); + }); + + return typeMap; + } + + function createDefaultMergeNode( property, graph ){ + var range; + + if ( elementTools.isDatatypeProperty(property) ) { + range = new RdfsLiteral(graph); + } else { + range = new OwlThing(graph); + } + range.id(PREFIX + property.id()); + + return range; + } + + function replaceRangesAndCollectNodesToHide( propertyWithEquivalents, mergeNode, properties, processedPropertyIds ){ + var nodesToHide = []; + + propertyWithEquivalents.forEach(function ( property ){ + + if ( property === undefined || mergeNode === undefined ) // @ WORKAROUND + return; + var oldRangeId = property.range(); + property.range(mergeNode.id()); + if ( !isDomainOrRangeOfOtherProperty(oldRangeId, properties) ) { + nodesToHide.push(oldRangeId); + } + + processedPropertyIds.add(property.id()); + }); + + return nodesToHide; + } + + function isDomainOrRangeOfOtherProperty( nodeId, properties ){ + for ( var i = 0; i < properties.length; i++ ) { + var property = properties[i]; + if ( property.domain() === nodeId || property.range() === nodeId ) { + return true; + } + } + + return false; + } + + function filterVisibleNodes( nodes, nodeIdsToHide ){ + var filteredNodes = []; + + nodes.forEach(function ( node ){ + if ( !nodeIdsToHide.has(node.id()) ) { + filteredNodes.push(node); + } + }); + + return filteredNodes; + } + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), +/* 68 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {module.exports = function ( graph ){ + /** variable defs **/ + var Class_dragger = {}; + Class_dragger.nodeId = 10001; + Class_dragger.parent = undefined; + Class_dragger.x = 0; + Class_dragger.y = 0; + Class_dragger.rootElement = undefined; + Class_dragger.rootNodeLayer = undefined; + Class_dragger.pathLayer = undefined; + Class_dragger.mouseEnteredVar = false; + Class_dragger.mouseButtonPressed = false; + Class_dragger.nodeElement = undefined; + Class_dragger.draggerObject = undefined; + Class_dragger.pathElement = undefined; + Class_dragger.typus = "Class_dragger"; + + Class_dragger.type = function (){ + return Class_dragger.typus; + }; + + Class_dragger.parentNode = function (){ + return Class_dragger.parent; + }; + + Class_dragger.hideClass_dragger = function ( val ){ + Class_dragger.pathElement.classed("hidden", val); + Class_dragger.nodeElement.classed("hidden", val); + Class_dragger.draggerObject.classed("hidden", val); + }; + + Class_dragger.setParentNode = function ( parentNode ){ + Class_dragger.parent = parentNode; + + if ( Class_dragger.mouseButtonPressed === false ) { + if ( Class_dragger.parent.actualRadius && Class_dragger.parent.actualRadius() ) { + Class_dragger.x = Class_dragger.parent.x + 10 + Class_dragger.parent.actualRadius(); + Class_dragger.y = Class_dragger.parent.y + 10 + Class_dragger.parent.actualRadius(); + } else { + Class_dragger.x = Class_dragger.parent.x + 60; + Class_dragger.y = Class_dragger.parent.y + 60; + } + } + Class_dragger.updateElement(); + }; + + Class_dragger.hideDragger = function ( val ){ + if ( Class_dragger.pathElement ) Class_dragger.pathElement.classed("hidden", val); + if ( Class_dragger.nodeElement ) Class_dragger.nodeElement.classed("hidden", val); + if ( Class_dragger.draggerObject ) Class_dragger.draggerObject.classed("hidden", val); + + }; + /** BASE HANDLING FUNCTIONS ------------------------------------------------- **/ + Class_dragger.id = function ( index ){ + if ( !arguments.length ) { + return Class_dragger.nodeId; + } + Class_dragger.nodeId = index; + }; + + Class_dragger.svgPathLayer = function ( layer ){ + Class_dragger.pathLayer = layer.append('g'); + }; + + Class_dragger.svgRoot = function ( root ){ + if ( !arguments.length ) + return Class_dragger.rootElement; + Class_dragger.rootElement = root; + Class_dragger.rootNodeLayer = Class_dragger.rootElement.append('g'); + Class_dragger.addMouseEvents(); + }; + + /** DRAWING FUNCTIONS ------------------------------------------------- **/ + Class_dragger.drawNode = function (){ + Class_dragger.pathElement = Class_dragger.pathLayer.append('line') + .classed("classNodeDragPath", true); + Class_dragger.pathElement.attr("x1", 0) + .attr("y1", 0) + .attr("x2", 0) + .attr("y2", 0); + + // var lineData = [ + // {"x": 0, "y": 0}, + // {"x": 0, "y": 40}, + // {"x": -40, "y": 0}, + // {"x": 0, "y": -40}, + // {"x": 0, "y": 0} + // ]; + + var lineData = [ + { "x": -40, "y": 0 }, // start + { "x": -20, "y": -10 }, + { "x": 20, "y": -50 }, + { "x": -10, "y": 0 }, // center + { "x": 20, "y": 50 }, + { "x": -20, "y": 10 }, + { "x": -40, "y": 0 } + ]; + + + var lineFunction = d3.svg.line() + .x(function ( d ){ + return d.x; + }) + .y(function ( d ){ + return d.y; + }) + .interpolate("basis-closed"); + var pathData = "M 20,40 C 0,15 0,-15 20,-40 L -40,0 Z"; + // var pathData="M 20,40 C 0,15 0,-15 20,-40 20,-40 -35.22907,-23.905556 -45.113897,0.06313453 -35.22907,20.095453 20,40 20,40 Z"; + // var pathData="M 39.107144,51.25 C 0,17.362169 0,-13.75 39.285715,-49.821429 c 0,0 -69.58321,34.511175 -100.714286,50.35714329 C -22.96643,20.324376 39.107144,51.25 39.107144,51.25 Z"; + + Class_dragger.nodeElement = Class_dragger.rootNodeLayer.append('path').attr("d", pathData); + Class_dragger.nodeElement.classed("classDraggerNode", true); + Class_dragger.draggerObject = Class_dragger.rootNodeLayer.append("circle"); + if ( graph.options().useAccuracyHelper() ) { + Class_dragger.draggerObject.attr("r", 40) + .attr("cx", 0) + .attr("cy", 0) + .classed("superHiddenElement", true); + Class_dragger.draggerObject.classed("superOpacityElement", !graph.options().showDraggerObject()); + } + + + }; + + Class_dragger.updateElement = function (){ + + // Class_dragger.pathLayer.attr("transform", "translate(" + Class_dragger.x + "," + Class_dragger.y + ")"); + // Class_dragger.rootElement.attr("transform", "translate(" + Class_dragger.x + "," + Class_dragger.y + ")"); + if ( Class_dragger.pathElement ) { + + // compute start point ; + + + var sX = Class_dragger.parent.x, + sY = Class_dragger.parent.y, + eX = Class_dragger.x, + eY = Class_dragger.y; + + + // this is used only when you dont have a proper layout ordering; + var dirX = eX - sX; + var dirY = eY - sY; + var len = Math.sqrt((dirX * dirX) + (dirY * dirY)); + + var nX = dirX / len; + var nY = dirY / len; + + var ppX = sX + nX * Class_dragger.parent.actualRadius(); + var ppY = sY + nY * Class_dragger.parent.actualRadius(); + + var ncx = nX * 15; + var ncy = nY * 15; + Class_dragger.draggerObject.attr("cx", ncx) + .attr("cy", ncy); + + Class_dragger.pathElement.attr("x1", ppX) + .attr("y1", ppY) + .attr("x2", eX) + .attr("y2", eY); + } + var angle = Math.atan2(Class_dragger.parent.y - Class_dragger.y, Class_dragger.parent.x - Class_dragger.x) * 180 / Math.PI; + + Class_dragger.nodeElement.attr("transform", "translate(" + Class_dragger.x + "," + Class_dragger.y + ")" + "rotate(" + angle + ")"); + Class_dragger.draggerObject.attr("transform", "translate(" + Class_dragger.x + "," + Class_dragger.y + ")"); + // console.log("update Elmenent root element"+Class_dragger.x + "," + Class_dragger.y ); + // + // Class_dragger.nodeElement.attr("transform", function (d) { + // return "rotate(" + angle + ")"; + // }); + }; + + /** MOUSE HANDLING FUNCTIONS ------------------------------------------------- **/ + + Class_dragger.addMouseEvents = function (){ + // console.log("adding mouse events"); + Class_dragger.rootNodeLayer.selectAll("*").on("mouseover", Class_dragger.onMouseOver) + .on("mouseout", Class_dragger.onMouseOut) + .on("click", function (){ + }) + .on("dblclick", function (){ + }) + .on("mousedown", Class_dragger.mouseDown) + .on("mouseup", Class_dragger.mouseUp); + }; + + Class_dragger.mouseDown = function (){ + Class_dragger.nodeElement.style("cursor", "move"); + Class_dragger.nodeElement.classed("classDraggerNodeHovered", true); + Class_dragger.mouseButtonPressed = true; + console.log("Mouse DOWN from Dragger"); + }; + + Class_dragger.mouseUp = function (){ + Class_dragger.nodeElement.style("cursor", "auto"); + Class_dragger.mouseButtonPressed = false; + console.log("Mouse UP from Dragger"); + }; + + + Class_dragger.mouseEntered = function ( p ){ + if ( !arguments.length ) return Class_dragger.mouseEnteredVar; + Class_dragger.mouseEnteredVar = p; + return Class_dragger; + }; + + Class_dragger.selectedViaTouch = function ( val ){ + Class_dragger.nodeElement.classed("classDraggerNode", !val); + Class_dragger.nodeElement.classed("classDraggerNodeHovered", val); + + }; + + Class_dragger.onMouseOver = function (){ + if ( Class_dragger.mouseEntered() ) { + return; + } + Class_dragger.nodeElement.classed("classDraggerNode", false); + Class_dragger.nodeElement.classed("classDraggerNodeHovered", true); + var selectedNode = Class_dragger.rootElement.node(), + nodeContainer = selectedNode.parentNode; + nodeContainer.appendChild(selectedNode); + + Class_dragger.mouseEntered(true); + + }; + Class_dragger.onMouseOut = function (){ + if ( Class_dragger.mouseButtonPressed === true ) + return; + Class_dragger.nodeElement.classed("classDraggerNodeHovered", false); + Class_dragger.nodeElement.classed("classDraggerNode", true); + Class_dragger.mouseEntered(false); + }; + + Class_dragger.setPosition = function ( x, y ){ + + Class_dragger.x = x; + Class_dragger.y = y; + Class_dragger.updateElement(); + }; + + Class_dragger.setAdditionalClassForClass_dragger = function ( name, val ){ + // console.log("Class_dragger should sett the class here") + // Class_dragger.nodeElement.classed(name,val); + + }; + return Class_dragger; + }; + + + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), +/* 69 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {module.exports = function ( graph ){ + /** variable defs **/ + var Range_dragger = {}; + Range_dragger.nodeId = 10002; + Range_dragger.parent = undefined; + Range_dragger.x = 0; + Range_dragger.y = 0; + Range_dragger.rootElement = undefined; + Range_dragger.rootNodeLayer = undefined; + Range_dragger.pathLayer = undefined; + Range_dragger.mouseEnteredVar = false; + Range_dragger.mouseButtonPressed = false; + Range_dragger.nodeElement = undefined; + Range_dragger.draggerObject = undefined; + + Range_dragger.pathElement = undefined; + Range_dragger.typus = "Range_dragger"; + + Range_dragger.type = function (){ + return Range_dragger.typus; + }; + + // TODO: We need the endPoint of the Link here! + Range_dragger.parentNode = function (){ + return Range_dragger.parent; + }; + + Range_dragger.hide_dragger = function ( val ){ + Range_dragger.pathElement.classed("hidden", val); + Range_dragger.nodeElement.classed("hidden", val); + Range_dragger.draggerObject.classed("hidden", val); + }; + Range_dragger.hideDragger = function ( val ){ + if ( Range_dragger.pathElement ) Range_dragger.pathElement.classed("hidden", val); + if ( Range_dragger.nodeElement ) Range_dragger.nodeElement.classed("hidden", val); + if ( Range_dragger.draggerObject ) Range_dragger.draggerObject.classed("hidden", val); + + + }; + + Range_dragger.reDrawEverthing = function (){ + Range_dragger.setParentProperty(Range_dragger.parent); + }; + Range_dragger.updateRange = function ( newRange ){ + + if ( graph.genericPropertySanityCheck(Range_dragger.parent.domain(), newRange, + Range_dragger.parent.type(), + "Could not update range", "Restoring previous range") === false ) return; + + // check for triple duplicates! + + if ( graph.propertyCheckExistenceChecker(Range_dragger.parent, Range_dragger.parent.domain(), newRange) === false ) + return; + if ( Range_dragger.parent.labelElement() === undefined ) return; + if ( Range_dragger.parent.labelElement().attr("transform") === "translate(0,15)" || + Range_dragger.parent.labelElement().attr("transform") === "translate(0,-15)" ) { + var prop = Range_dragger.parent; + Range_dragger.parent.inverse().inverse(null); + Range_dragger.parent.inverse(null); + prop.range(newRange); + } + + else { + Range_dragger.parent.range(newRange); + } + // update the position of the new range + var rX = newRange.x; + var rY = newRange.y; + + var dX = Range_dragger.parent.domain().x; + var dY = Range_dragger.parent.domain().y; + + + // center + var cX = 0.49 * (dX + rX); + var cY = 0.49 * (dY + rY); + // put position there; + Range_dragger.parent.labelElement().x = cX; + Range_dragger.parent.labelElement().px = cX; + Range_dragger.parent.labelElement().y = cY; + Range_dragger.parent.labelElement().py = cY; + + }; + + Range_dragger.setParentProperty = function ( parentProperty, inversed ){ + Range_dragger.parent = parentProperty; + var iP; + var renElem; + Range_dragger.isLoopProperty = false; + if ( parentProperty.domain() === parentProperty.range() ) Range_dragger.isLoopProperty = true; + Range_dragger.parent = parentProperty; + renElem = parentProperty.labelObject(); + if ( inversed === true ) { + if ( parentProperty.labelElement() && parentProperty.labelElement().attr("transform") === "translate(0,15)" ) { + iP = renElem.linkDomainIntersection; + if ( renElem.linkDomainIntersection ) { + Range_dragger.x = iP.x; + Range_dragger.y = iP.y; + } + } else { + iP = renElem.linkRangeIntersection; + if ( renElem.linkRangeIntersection ) { + Range_dragger.x = iP.x; + Range_dragger.y = iP.y; + } + } + } + else { + iP = renElem.linkRangeIntersection; + if ( renElem.linkRangeIntersection ) { + Range_dragger.x = iP.x; + Range_dragger.y = iP.y; + } + } + + Range_dragger.updateElement(); + }; + + + /** BASE HANDLING FUNCTIONS ------------------------------------------------- **/ + Range_dragger.id = function ( index ){ + if ( !arguments.length ) { + return Range_dragger.nodeId; + } + Range_dragger.nodeId = index; + }; + + Range_dragger.svgPathLayer = function ( layer ){ + Range_dragger.pathLayer = layer.append('g'); + }; + + Range_dragger.svgRoot = function ( root ){ + if ( !arguments.length ) + return Range_dragger.rootElement; + Range_dragger.rootElement = root; + Range_dragger.rootNodeLayer = Range_dragger.rootElement.append('g'); + Range_dragger.addMouseEvents(); + }; + + /** DRAWING FUNCTIONS ------------------------------------------------- **/ + Range_dragger.drawNode = function (){ + Range_dragger.pathElement = Range_dragger.pathLayer.append('line') + .classed("classNodeDragPath", true); + Range_dragger.pathElement.attr("x1", 0) + .attr("y1", 0) + .attr("x2", 0) + .attr("y2", 0); + + // var lineData = [ + // {"x": 0, "y": 0}, + // {"x": 0, "y": 40}, + // {"x": -40, "y": 0}, + // {"x": 0, "y": -40}, + // {"x": 0, "y": 0} + // ]; + + var lineData = [ + { "x": -40, "y": 0 }, // start + { "x": -20, "y": -10 }, + { "x": 20, "y": -50 }, + { "x": -10, "y": 0 }, // center + { "x": 20, "y": 50 }, + { "x": -20, "y": 10 }, + { "x": -40, "y": 0 } + ]; + + + var lineFunction = d3.svg.line() + .x(function ( d ){ + return d.x; + }) + .y(function ( d ){ + return d.y; + }) + .interpolate("basis-closed"); + var pathData = "M 61,40 C 41,15 41,-15 61,-40 L 1,0 Z"; + + Range_dragger.nodeElement = Range_dragger.rootNodeLayer.append('path').attr("d", pathData); + Range_dragger.nodeElement.classed("classDraggerNode", true); + if ( graph.options().useAccuracyHelper() ) { + Range_dragger.draggerObject = Range_dragger.rootNodeLayer.append("circle"); + Range_dragger.draggerObject.attr("r", 40) + .attr("cx", 0) + .attr("cy", 0) + .classed("superHiddenElement", true); + Range_dragger.draggerObject.classed("superOpacityElement", !graph.options().showDraggerObject()); + } + + + }; + + Range_dragger.updateElementViaDomainDragger = function ( x, y ){ + + var range_x = x; + var range_y = y; + + var dex = Range_dragger.parent.range().x; + var dey = Range_dragger.parent.range().y; + + var dir_X = x - dex; + var dir_Y = y - dey; + + var len = Math.sqrt(dir_X * dir_X + dir_Y * dir_Y); + + var nX = dir_X / len; + var nY = dir_Y / len; + + + var ep_range_x = dex + nX * Range_dragger.parent.range().actualRadius(); + var ep_range_y = dey + nY * Range_dragger.parent.range().actualRadius(); + + + var dx = range_x - ep_range_x; + var dy = range_y - ep_range_y; + len = Math.sqrt(dx * dx + dy * dy); + nX = dx / len; + nY = dy / len; + + var angle = Math.atan2(ep_range_y - range_y, ep_range_x - range_x) * 180 / Math.PI + 180; + Range_dragger.nodeElement.attr("transform", "translate(" + ep_range_x + "," + ep_range_y + ")" + "rotate(" + angle + ")"); + var doX = ep_range_x + nX * 40; + var doY = ep_range_y + nY * 40; + Range_dragger.draggerObject.attr("transform", "translate(" + doX + "," + doY + ")"); + + }; + + + Range_dragger.updateElement = function (){ + if ( Range_dragger.mouseButtonPressed === true || Range_dragger.parent === undefined ) return; + + var range = Range_dragger.parent.range(); + var iP = Range_dragger.parent.labelObject().linkRangeIntersection; + if ( Range_dragger.parent.labelElement() === undefined ) return; + var offsetForLoop = 48; + if ( Range_dragger.parent.labelElement().attr("transform") === "translate(0,15)" ) { + range = Range_dragger.parent.inverse().domain(); + iP = Range_dragger.parent.labelObject().linkDomainIntersection; + offsetForLoop = -48; + } + + if ( iP === undefined ) return; + var range_x = range.x; + var range_y = range.y; + + var ep_range_x = iP.x; + var ep_range_y = iP.y; + // offset for dragger object + var dx = range_x - ep_range_x; + var dy = range_y - ep_range_y; + var len = Math.sqrt(dx * dx + dy * dy); + var nX = dx / len; + var nY = dy / len; + var angle = Math.atan2(ep_range_y - range_y, ep_range_x - range_x) * 180 / Math.PI; + + var doX = ep_range_x - nX * 40; + var doY = ep_range_y - nY * 40; + + if ( Range_dragger.isLoopProperty === true ) + angle -= offsetForLoop; + + + Range_dragger.nodeElement.attr("transform", "translate(" + ep_range_x + "," + ep_range_y + ")" + "rotate(" + angle + ")"); + Range_dragger.draggerObject.attr("transform", "translate(" + doX + "," + doY + ")"); + + + }; + + /** MOUSE HANDLING FUNCTIONS ------------------------------------------------- **/ + + Range_dragger.addMouseEvents = function (){ + var rootLayer = Range_dragger.rootNodeLayer.selectAll("*"); + rootLayer.on("mouseover", Range_dragger.onMouseOver) + .on("mouseout", Range_dragger.onMouseOut) + .on("click", function (){ + }) + .on("dblclick", function (){ + }) + .on("mousedown", Range_dragger.mouseDown) + .on("mouseup", Range_dragger.mouseUp); + }; + + Range_dragger.mouseDown = function (){ + Range_dragger.nodeElement.style("cursor", "move"); + Range_dragger.nodeElement.classed("classDraggerNodeHovered", true); + Range_dragger.mouseButtonPressed = true; + }; + + Range_dragger.mouseUp = function (){ + Range_dragger.nodeElement.style("cursor", "auto"); + Range_dragger.nodeElement.classed("classDraggerNodeHovered", false); + Range_dragger.mouseButtonPressed = false; + }; + + + Range_dragger.mouseEntered = function ( p ){ + if ( !arguments.length ) return Range_dragger.mouseEnteredVar; + Range_dragger.mouseEnteredVar = p; + return Range_dragger; + }; + + Range_dragger.selectedViaTouch = function ( val ){ + Range_dragger.nodeElement.classed("classDraggerNode", !val); + Range_dragger.nodeElement.classed("classDraggerNodeHovered", val); + + }; + + Range_dragger.onMouseOver = function (){ + if ( Range_dragger.mouseEntered() ) { + return; + } + Range_dragger.nodeElement.classed("classDraggerNode", false); + Range_dragger.nodeElement.classed("classDraggerNodeHovered", true); + var selectedNode = Range_dragger.rootElement.node(), + nodeContainer = selectedNode.parentNode; + nodeContainer.appendChild(selectedNode); + + Range_dragger.mouseEntered(true); + + }; + Range_dragger.onMouseOut = function (){ + if ( Range_dragger.mouseButtonPressed === true ) + return; + Range_dragger.nodeElement.classed("classDraggerNodeHovered", false); + Range_dragger.nodeElement.classed("classDraggerNode", true); + Range_dragger.mouseEntered(false); + }; + + Range_dragger.setPosition = function ( x, y ){ + var range_x = Range_dragger.parent.domain().x; + var range_y = Range_dragger.parent.domain().y; + + // var position of the rangeEndPoint + var ep_range_x = x; + var ep_range_y = y; + + // offset for dragger object + var dx = range_x - ep_range_x; + var dy = range_y - ep_range_y; + + var len = Math.sqrt(dx * dx + dy * dy); + + var nX = dx / len; + var nY = dy / len; + + + var angle = Math.atan2(dy, dx) * 180 / Math.PI; + var doX = ep_range_x + nX * 40; + var doY = ep_range_y + nY * 40; + Range_dragger.nodeElement.attr("transform", "translate(" + ep_range_x + "," + ep_range_y + ")" + "rotate(" + angle + ")"); + Range_dragger.draggerObject.attr("transform", "translate(" + doX + "," + doY + ")"); + Range_dragger.x = x; + Range_dragger.y = y; + + }; + + Range_dragger.setAdditionalClassForClass_dragger = function ( name, val ){ + + }; + return Range_dragger; + }; + + + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), +/* 70 */ +/***/ (function(module, exports) { + + module.exports = function ( graph ){ + /** variable defs **/ + var Domain_dragger = {}; + Domain_dragger.nodeId = 10002; + Domain_dragger.parent = undefined; + Domain_dragger.x = 0; + Domain_dragger.y = 0; + Domain_dragger.rootElement = undefined; + Domain_dragger.rootNodeLayer = undefined; + Domain_dragger.pathLayer = undefined; + Domain_dragger.mouseEnteredVar = false; + Domain_dragger.mouseButtonPressed = false; + Domain_dragger.nodeElement = undefined; + Domain_dragger.draggerObject = undefined; + + Domain_dragger.pathElement = undefined; + Domain_dragger.typus = "Domain_dragger"; + + Domain_dragger.type = function (){ + return Domain_dragger.typus; + }; + + + // TODO: We need the endPoint of the Link here! + Domain_dragger.parentNode = function (){ + return Domain_dragger.parent; + }; + + Domain_dragger.hide_dragger = function ( val ){ + Domain_dragger.pathElement.classed("hidden", val); + Domain_dragger.nodeElement.classed("hidden", val); + Domain_dragger.draggerObject.classed("hidden", val); + }; + + Domain_dragger.reDrawEverthing = function (){ + Domain_dragger.setParentProperty(Domain_dragger.parent); + }; + Domain_dragger.updateDomain = function ( newDomain ){ + + if ( graph.genericPropertySanityCheck(Domain_dragger.parent.range(), newDomain, Domain_dragger.parent.type(), + "Could not update domain", "Restoring previous domain") === false ) { + Domain_dragger.updateElement(); + return; + } + + if ( graph.propertyCheckExistenceChecker(Domain_dragger.parent, newDomain, Domain_dragger.parent.range()) === false ) + return; + + + if ( Domain_dragger.parent.labelElement() === undefined ) { + Domain_dragger.updateElement(); + return; + } + if ( Domain_dragger.parent.labelElement().attr("transform") === "translate(0,15)" || + Domain_dragger.parent.labelElement().attr("transform") === "translate(0,-15)" ) { + var prop = Domain_dragger.parent; + Domain_dragger.parent.inverse().inverse(null); + Domain_dragger.parent.inverse(null); + console.log("SPLITTING ITEMS!"); + prop.domain(newDomain); + } + else { + Domain_dragger.parent.domain(newDomain); + } + + // update the position of the new range + var rX = Domain_dragger.parent.range().x; + var rY = Domain_dragger.parent.range().y; + var dX = newDomain.x; + var dY = newDomain.y; + + // center + var cX = 0.49 * (dX + rX); + var cY = 0.49 * (dY + rY); + // put position there; + Domain_dragger.parent.labelObject().x = cX; + Domain_dragger.parent.labelObject().px = cX; + Domain_dragger.parent.labelObject().y = cY; + Domain_dragger.parent.labelObject().py = cY; + Domain_dragger.updateElement(); + + }; + + Domain_dragger.setParentProperty = function ( parentProperty, inverted ){ + Domain_dragger.invertedProperty = inverted; + var renElem; + var iP; + Domain_dragger.isLoopProperty = false; + if ( parentProperty.domain() === parentProperty.range() ) + Domain_dragger.isLoopProperty = true; + + Domain_dragger.parent = parentProperty; + renElem = parentProperty.labelObject(); + if ( inverted === true ) { + + // this is the lower element + if ( parentProperty.labelElement() && parentProperty.labelElement().attr("transform") === "translate(0,15)" ) { + // console.log("This is the lower element!"); + iP = renElem.linkRangeIntersection; + if ( renElem.linkRangeIntersection ) { + Domain_dragger.x = iP.x; + Domain_dragger.y = iP.y; + } + } + else { + // console.log("This is the upper element"); + iP = renElem.linkDomainIntersection; + if ( renElem.linkDomainIntersection ) { + Domain_dragger.x = iP.x; + Domain_dragger.y = iP.y; + } + } + } + else { + // console.log("This is single element"); + iP = renElem.linkDomainIntersection; + if ( renElem.linkDomainIntersection ) { + Domain_dragger.x = iP.x; + Domain_dragger.y = iP.y; + } + } + Domain_dragger.updateElement(); + + }; + + Domain_dragger.hideDragger = function ( val ){ + if ( Domain_dragger.pathElement ) Domain_dragger.pathElement.classed("hidden", val); + if ( Domain_dragger.nodeElement ) Domain_dragger.nodeElement.classed("hidden", val); + if ( Domain_dragger.draggerObject ) Domain_dragger.draggerObject.classed("hidden", val); + + + }; + /** BASE HANDLING FUNCTIONS ------------------------------------------------- **/ + Domain_dragger.id = function ( index ){ + if ( !arguments.length ) { + return Domain_dragger.nodeId; + } + Domain_dragger.nodeId = index; + }; + + Domain_dragger.svgPathLayer = function ( layer ){ + Domain_dragger.pathLayer = layer.append('g'); + }; + + Domain_dragger.svgRoot = function ( root ){ + if ( !arguments.length ) + return Domain_dragger.rootElement; + Domain_dragger.rootElement = root; + Domain_dragger.rootNodeLayer = Domain_dragger.rootElement.append('g'); + Domain_dragger.addMouseEvents(); + }; + + /** DRAWING FUNCTIONS ------------------------------------------------- **/ + Domain_dragger.drawNode = function (){ + Domain_dragger.pathElement = Domain_dragger.pathLayer.append('line') + .classed("classNodeDragPath", true); + Domain_dragger.pathElement.attr("x1", 0) + .attr("y1", 0) + .attr("x2", 0) + .attr("y2", 0); + + var pathData = "M 10,40 C -10,15 -10,-15 10,-40 -8.8233455,-13.641384 -36.711107,-5.1228436 -50,0 -36.696429,4.9079017 -8.6403157,13.745728 10,40 Z"; + Domain_dragger.nodeElement = Domain_dragger.rootNodeLayer.append('path').attr("d", pathData); + Domain_dragger.nodeElement.classed("classDraggerNode", true); + if ( graph.options().useAccuracyHelper() ) { + Domain_dragger.draggerObject = Domain_dragger.rootNodeLayer.append("circle"); + Domain_dragger.draggerObject.attr("r", 40) + .attr("cx", 0) + .attr("cy", 0) + .classed("superHiddenElement", true); + Domain_dragger.draggerObject.classed("superOpacityElement", !graph.options().showDraggerObject()); + } + + + }; + Domain_dragger.updateElementViaRangeDragger = function ( x, y ){ + var range_x = x; + var range_y = y; + + var dex = Domain_dragger.parent.domain().x; + var dey = Domain_dragger.parent.domain().y; + + var dir_X = x - dex; + var dir_Y = y - dey; + + var len = Math.sqrt(dir_X * dir_X + dir_Y * dir_Y); + + var nX = dir_X / len; + var nY = dir_Y / len; + + + var ep_range_x = dex + nX * Domain_dragger.parent.domain().actualRadius(); + var ep_range_y = dey + nY * Domain_dragger.parent.domain().actualRadius(); + + var angle = Math.atan2(ep_range_y - range_y, ep_range_x - range_x) * 180 / Math.PI; + + Domain_dragger.nodeElement.attr("transform", "translate(" + ep_range_x + "," + ep_range_y + ")" + "rotate(" + angle + ")"); + var dox = ep_range_x + nX * 20; + var doy = ep_range_y + nY * 20; + Domain_dragger.draggerObject.attr("transform", "translate(" + dox + "," + doy + ")"); + }; + + + Domain_dragger.updateElement = function (){ + if ( Domain_dragger.mouseButtonPressed === true || Domain_dragger.parent === undefined ) return; + + var domain = Domain_dragger.parent.domain(); + var iP = Domain_dragger.parent.labelObject().linkDomainIntersection; + if ( Domain_dragger.parent.labelElement() === undefined ) return; + if ( Domain_dragger.parent.labelElement().attr("transform") === "translate(0,15)" ) { + Domain_dragger.parent.inverse().domain(); + iP = Domain_dragger.parent.labelObject().linkRangeIntersection; + + } + var range_x = domain.x; + var range_y = domain.y; + + + if ( iP === undefined ) return; + var ep_range_x = iP.x; + var ep_range_y = iP.y; + + var dx = range_x - ep_range_x; + var dy = range_y - ep_range_y; + var len = Math.sqrt(dx * dx + dy * dy); + + var nX = dx / len; + var nY = dy / len; + + var dox = ep_range_x - nX * 20; + var doy = ep_range_y - nY * 20; + var angle = Math.atan2(ep_range_y - range_y, ep_range_x - range_x) * 180 / Math.PI + 180; + + Domain_dragger.nodeElement.attr("transform", "translate(" + ep_range_x + "," + ep_range_y + ")" + "rotate(" + angle + ")"); + Domain_dragger.draggerObject.attr("transform", "translate(" + dox + "," + doy + ")"); + }; + + /** MOUSE HANDLING FUNCTIONS ------------------------------------------------- **/ + + Domain_dragger.addMouseEvents = function (){ + var rootLayer = Domain_dragger.rootNodeLayer.selectAll("*"); + rootLayer.on("mouseover", Domain_dragger.onMouseOver) + .on("mouseout", Domain_dragger.onMouseOut) + .on("click", function (){ + }) + .on("dblclick", function (){ + }) + .on("mousedown", Domain_dragger.mouseDown) + .on("mouseup", Domain_dragger.mouseUp); + }; + + Domain_dragger.mouseDown = function (){ + Domain_dragger.nodeElement.style("cursor", "move"); + Domain_dragger.nodeElement.classed("classDraggerNodeHovered", true); + Domain_dragger.mouseButtonPressed = true; + }; + + Domain_dragger.mouseUp = function (){ + Domain_dragger.nodeElement.style("cursor", "auto"); + Domain_dragger.nodeElement.classed("classDraggerNodeHovered", false); + Domain_dragger.mouseButtonPressed = false; + }; + + + Domain_dragger.mouseEntered = function ( p ){ + if ( !arguments.length ) return Domain_dragger.mouseEnteredVar; + Domain_dragger.mouseEnteredVar = p; + return Domain_dragger; + }; + + Domain_dragger.selectedViaTouch = function ( val ){ + Domain_dragger.nodeElement.classed("classDraggerNode", !val); + Domain_dragger.nodeElement.classed("classDraggerNodeHovered", val); + + }; + + Domain_dragger.onMouseOver = function (){ + if ( Domain_dragger.mouseEntered() ) { + return; + } + Domain_dragger.nodeElement.classed("classDraggerNode", false); + Domain_dragger.nodeElement.classed("classDraggerNodeHovered", true); + var selectedNode = Domain_dragger.rootElement.node(), + nodeContainer = selectedNode.parentNode; + nodeContainer.appendChild(selectedNode); + + Domain_dragger.mouseEntered(true); + + }; + Domain_dragger.onMouseOut = function (){ + if ( Domain_dragger.mouseButtonPressed === true ) + return; + Domain_dragger.nodeElement.classed("classDraggerNodeHovered", false); + Domain_dragger.nodeElement.classed("classDraggerNode", true); + Domain_dragger.mouseEntered(false); + }; + + Domain_dragger.setPosition = function ( x, y ){ + var range_x = Domain_dragger.parent.range().x; + var range_y = Domain_dragger.parent.range().y; + + // var position of the rangeEndPoint + var ep_range_x = x; + var ep_range_y = y; + + // offset for dragger object + var dx = range_x - ep_range_x; + var dy = range_y - ep_range_y; + + var len = Math.sqrt(dx * dx + dy * dy); + + var nX = dx / len; + var nY = dy / len; + var dox = ep_range_x + nX * 20; + var doy = ep_range_y + nY * 20; + + var angle = Math.atan2(range_y - ep_range_y, range_x - ep_range_x) * 180 / Math.PI + 180; + + Domain_dragger.nodeElement.attr("transform", "translate(" + ep_range_x + "," + ep_range_y + ")" + "rotate(" + angle + ")"); + Domain_dragger.draggerObject.attr("transform", "translate(" + dox + "," + doy + ")"); + + Domain_dragger.x = x; + Domain_dragger.y = y; + + }; + + Domain_dragger.setAdditionalClassForClass_dragger = function ( name, val ){ + // console.log("Class_dragger should sett the class here") + // Class_dragger.nodeElement.classed(name,val); + + }; + return Domain_dragger; + }; + + + + +/***/ }), +/* 71 */ +/***/ (function(module, exports, __webpack_require__) { + + var CenteringTextElement = __webpack_require__(14); + var elementTools = __webpack_require__(63)(); + var math = __webpack_require__(43)(); + module.exports = function ( graph ){ + /** variable defs **/ + var ShadowClone = {}; + ShadowClone.nodeId = 10003; + ShadowClone.parent = undefined; + ShadowClone.s_x = 0; + ShadowClone.s_y = 0; + ShadowClone.e_x = 0; + ShadowClone.e_y = 0; + ShadowClone.rootElement = undefined; + ShadowClone.rootNodeLayer = undefined; + ShadowClone.pathLayer = undefined; + ShadowClone.nodeElement = undefined; + ShadowClone.pathElement = undefined; + ShadowClone.typus = "shadowClone"; + + + ShadowClone.type = function (){ + return ShadowClone.typus; + }; + + // TODO: We need the endPoint of the Link here! + ShadowClone.parentNode = function (){ + return ShadowClone.parent; + }; + + ShadowClone.setParentProperty = function ( parentProperty, inverted ){ + ShadowClone.invertedProperty = inverted; + ShadowClone.parent = parentProperty; + var renElment; + if ( inverted === true ) { + renElment = parentProperty.inverse().labelObject(); + if ( renElment.linkRangeIntersection && renElment.linkDomainIntersection ) { + var iiP_range = renElment.linkDomainIntersection; + var iiP_domain = renElment.linkRangeIntersection; + ShadowClone.s_x = iiP_domain.x; + ShadowClone.s_y = iiP_domain.y; + ShadowClone.e_x = iiP_range.x; + ShadowClone.e_y = iiP_range.y; + } + } + else { + renElment = parentProperty.labelObject(); + + if ( renElment.linkRangeIntersection && renElment.linkDomainIntersection ) { + var iP_range = renElment.linkRangeIntersection; + var iP_domain = renElment.linkDomainIntersection; + ShadowClone.s_x = iP_domain.x; + ShadowClone.s_y = iP_domain.y; + ShadowClone.e_x = iP_range.x; + ShadowClone.e_y = iP_range.y; + } + + } + + ShadowClone.rootNodeLayer.remove(); + ShadowClone.rootNodeLayer = ShadowClone.rootElement.append('g'); + ShadowClone.rootNodeLayer.datum(parentProperty); + + // ShadowClone.pathElement.remove(); + // ShadowClone.pathElement = ShadowClone.pathLayer.append('line'); + // + // ShadowClone.pathElement.attr("x1", ShadowClone.s_x) + // .attr("y1", ShadowClone.s_y) + // .attr("x2", ShadowClone.e_x) + // .attr("y2", ShadowClone.e_y); + ShadowClone.pathElement.remove(); + ShadowClone.pathElement = ShadowClone.pathLayer.append('line'); + ShadowClone.markerElement = ShadowClone.pathLayer.append("marker"); + ShadowClone.markerElement.attr("id", "shadowCloneMarker"); + ShadowClone.pathElement.attr("x1", ShadowClone.e_x) + .attr("y1", ShadowClone.e_y) + .attr("x2", ShadowClone.s_x) + .attr("y2", ShadowClone.s_y); + ShadowClone.pathElement.classed(parentProperty.linkType(), true); + + if ( parentProperty.markerElement() ) { + ShadowClone.markerElement.attr("viewBox", parentProperty.markerElement().attr("viewBox")) + .attr("markerWidth", parentProperty.markerElement().attr("markerWidth")) + .attr("markerHeight", parentProperty.markerElement().attr("markerHeight")) + .attr("orient", parentProperty.markerElement().attr("orient")); + + var markerPath = parentProperty.markerElement().select("path"); + ShadowClone.markerElement.append("path") + .attr("d", markerPath.attr("d")) + .classed(parentProperty.markerType(), true); + + ShadowClone.pathElement.attr("marker-end", "url(#" + "shadowCloneMarker" + ")"); + ShadowClone.markerElement.classed("hidden", !elementTools.isDatatypeProperty(parentProperty)); + } + var rect = ShadowClone.rootNodeLayer.append("rect") + .classed(parentProperty.styleClass(), true) + .classed("property", true) + .attr("x", -parentProperty.width() / 2) + .attr("y", -parentProperty.height() / 2) + .attr("width", parentProperty.width()) + .attr("height", parentProperty.height()); + + if ( parentProperty.visualAttributes() ) { + rect.classed(parentProperty.visualAttributes(), true); + } + rect.classed("datatype", false); + var bgColor = parentProperty.backgroundColor(); + + if ( parentProperty.attributes().indexOf("deprecated") > -1 ) { + bgColor = undefined; + rect.classed("deprecatedproperty", true); + } else { + rect.classed("deprecatedproperty", false); + } + rect.style("fill", bgColor); + + // add Text; + var equivalentsString = parentProperty.equivalentsString(); + var suffixForFollowingEquivalents = equivalentsString ? "," : ""; + + + var textElement = new CenteringTextElement(ShadowClone.rootNodeLayer, bgColor); + textElement.addText(parentProperty.labelForCurrentLanguage(), "", suffixForFollowingEquivalents); + textElement.addEquivalents(equivalentsString); + textElement.addSubText(parentProperty.indicationString()); + + + var cx = 0.5 * (ShadowClone.s_x + ShadowClone.e_x); + var cy = 0.5 * (ShadowClone.s_y + ShadowClone.e_y); + ShadowClone.rootNodeLayer.attr("transform", "translate(" + cx + "," + cy + ")"); + ShadowClone.rootNodeLayer.classed("hidden", true); + ShadowClone.pathElement.classed("hidden", true); + + + }; + + ShadowClone.hideClone = function ( val ){ + if ( ShadowClone.rootNodeLayer ) ShadowClone.rootNodeLayer.classed("hidden", val); + if ( ShadowClone.pathElement ) ShadowClone.pathElement.classed("hidden", val); + }; + + ShadowClone.hideParentProperty = function ( val ){ + + var labelObj = ShadowClone.parent.labelObject(); + if ( labelObj ) { + if ( ShadowClone.parent.labelElement().attr("transform") === "translate(0,15)" || + ShadowClone.parent.labelElement().attr("transform") === "translate(0,-15)" ) + ShadowClone.parent.inverse().hide(val); + + + } + ShadowClone.parent.hide(val); + + + }; + + /** BASE HANDLING FUNCTIONS ------------------------------------------------- **/ + ShadowClone.id = function ( index ){ + if ( !arguments.length ) { + return ShadowClone.nodeId; + } + ShadowClone.nodeId = index; + }; + + ShadowClone.svgPathLayer = function ( layer ){ + ShadowClone.pathLayer = layer.append('g'); + }; + + ShadowClone.svgRoot = function ( root ){ + if ( !arguments.length ) + return ShadowClone.rootElement; + ShadowClone.rootElement = root; + ShadowClone.rootNodeLayer = ShadowClone.rootElement.append('g'); + + }; + + /** DRAWING FUNCTIONS ------------------------------------------------- **/ + ShadowClone.drawClone = function (){ + ShadowClone.pathElement = ShadowClone.pathLayer.append('line'); + + ShadowClone.pathElement.attr("x1", 0) + .attr("y1", 0) + .attr("x2", 0) + .attr("y2", 0); + + }; + + + ShadowClone.updateElement = function (){ + ShadowClone.pathElement.attr("x1", ShadowClone.e_x) + .attr("y1", ShadowClone.e_y) + .attr("x2", ShadowClone.s_x) + .attr("y2", ShadowClone.s_y); + + var cx = 0.5 * (ShadowClone.s_x + ShadowClone.e_x); + var cy = 0.5 * (ShadowClone.s_y + ShadowClone.e_y); + ShadowClone.rootNodeLayer.attr("transform", "translate(" + cx + "," + cy + ")"); + }; + + ShadowClone.setInitialPosition = function (){ + + var renElment = ShadowClone.parent.labelObject(); + if ( renElment.linkRangeIntersection && renElment.linkDomainIntersection ) { + var iP_range = renElment.linkRangeIntersection; + var iP_domain = renElment.linkDomainIntersection; + ShadowClone.e_x = iP_domain.x; + ShadowClone.e_y = iP_domain.y; + ShadowClone.s_x = iP_range.x; + ShadowClone.s_y = iP_range.y; + } + ShadowClone.updateElement(); + return; + // + // var rex=ShadowClone.parent.range().x; + // var rey=ShadowClone.parent.range().y; + // + // + // var dex=ShadowClone.parent.domain().x; + // var dey=ShadowClone.parent.domain().y; + // + // + // var dir_X= rex-dex; + // var dir_Y= rey-dey; + // + // var len=Math.sqrt(dir_X*dir_X+dir_Y*dir_Y); + // var nX=dir_X/len; + // var nY=dir_Y/len; + // ShadowClone.s_x=rex-nX*ShadowClone.parent.range().actualRadius(); + // ShadowClone.s_y=rey-nY*ShadowClone.parent.range().actualRadius(); + // + // ShadowClone.e_x=dex+nX*ShadowClone.parent.domain().actualRadius(); + // ShadowClone.e_y=dey+nY*ShadowClone.parent.domain().actualRadius(); + // ShadowClone.updateElement(); + + }; + ShadowClone.setPositionDomain = function ( e_x, e_y ){ + + var rex = ShadowClone.parent.range().x; + var rey = ShadowClone.parent.range().y; + + + if ( elementTools.isDatatype(ShadowClone.parent.range()) === true ) { + var intersection = math.calculateIntersection({ x: e_x, y: e_y }, ShadowClone.parent.range(), 0); + ShadowClone.s_x = intersection.x; + ShadowClone.s_y = intersection.y; + } else { + var dir_X = rex - e_x; + var dir_Y = rey - e_y; + + var len = Math.sqrt(dir_X * dir_X + dir_Y * dir_Y); + + var nX = dir_X / len; + var nY = dir_Y / len; + ShadowClone.s_x = rex - nX * ShadowClone.parent.range().actualRadius(); + ShadowClone.s_y = rey - nY * ShadowClone.parent.range().actualRadius(); + + } + + + ShadowClone.e_x = e_x; + ShadowClone.e_y = e_y; + ShadowClone.updateElement(); + }; + + ShadowClone.setPosition = function ( s_x, s_y ){ + ShadowClone.s_x = s_x; + ShadowClone.s_y = s_y; + + // add normalized dir; + + var dex = ShadowClone.parent.domain().x; + var dey = ShadowClone.parent.domain().y; + + var dir_X = s_x - dex; + var dir_Y = s_y - dey; + + var len = Math.sqrt(dir_X * dir_X + dir_Y * dir_Y); + + var nX = dir_X / len; + var nY = dir_Y / len; + + + ShadowClone.e_x = dex + nX * ShadowClone.parent.domain().actualRadius(); + ShadowClone.e_y = dey + nY * ShadowClone.parent.domain().actualRadius(); + + + ShadowClone.updateElement(); + + + }; + + + /** MOUSE HANDLING FUNCTIONS ------------------------------------------------- **/ + + return ShadowClone; + }; + + + + +/***/ }), +/* 72 */ +/***/ (function(module, exports) { + + module.exports = function ( graph ){ + /** variable defs **/ + var prefixRepresentationModule = {}; + + var currentPrefixModel; + + prefixRepresentationModule.updatePrefixModel = function (){ + currentPrefixModel = graph.options().prefixList(); + }; + + + prefixRepresentationModule.validURL = function ( url ){ + return validURL(url); + }; + function validURL( str ){ + var urlregex = /^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/; + return urlregex.test(str); + } + + function splitURLIntoBaseAndResource( fullURL ){ + var splitedURL = { base: "", resource: "" }; + if ( fullURL === undefined ) { + splitedURL = { base: "ERROR", resource: "NOT FOUND" }; + return splitedURL; + } + + var resource, base; + // check if there is a last hashTag + if ( fullURL.indexOf("#") > -1 ) { + resource = fullURL.substring(fullURL.lastIndexOf('#') + 1); + base = fullURL.substring(0, fullURL.length - resource.length); + // overwrite base if it is ontologyIri; + if ( base === graph.options().getGeneralMetaObjectProperty('iri') ) { + base = ":"; + } + splitedURL.base = base; + splitedURL.resource = resource; + } else { + resource = fullURL.substring(fullURL.lastIndexOf('/') + 1); + base = fullURL.substring(0, fullURL.length - resource.length); + // overwrite base if it is ontologyIri; + if ( base === graph.options().getGeneralMetaObjectProperty('iri') ) { + base = ":"; + } + splitedURL.base = base; + splitedURL.resource = resource; + } + return splitedURL; + } + + prefixRepresentationModule.getPrefixRepresentationForFullURI = function ( fullURL ){ + prefixRepresentationModule.updatePrefixModel(); + var splittedURL = splitURLIntoBaseAndResource(fullURL); + + // lazy approach , for + // loop over prefix model + for ( var name in currentPrefixModel ) { + if ( currentPrefixModel.hasOwnProperty(name) ) { + // THIS IS CASE SENSITIVE! + if ( currentPrefixModel[name] === splittedURL.base ) { + return name + ":" + splittedURL.resource; + } + } + } + + if ( splittedURL.base === ":" ) { + return ":" + splittedURL.resource; + } + + return fullURL; + }; + + + return prefixRepresentationModule; + }; + + + + +/***/ }), +/* 73 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {var _ = __webpack_require__(58); + + module.exports = function (){ + + var DEFAULT_STATE = true; + var COLOR_MODES = [ + { type: "same", range: [d3.rgb("#36C"), d3.rgb("#36C")] }, + { type: "gradient", range: [d3.rgb("#36C"), d3.rgb("#EE2867")] } // taken from LD-VOWL + ]; + + var filter = {}, + nodes, + properties, + enabled = DEFAULT_STATE, + filteredNodes, + filteredProperties, + colorModeType = "same"; + + + filter.filter = function ( untouchedNodes, untouchedProperties ){ + nodes = untouchedNodes; + properties = untouchedProperties; + + var externalElements = filterExternalElements(nodes.concat(properties)); + + if ( enabled ) { + setColorsForExternals(externalElements); + } else { + resetBackgroundColors(externalElements); + } + + filteredNodes = nodes; + filteredProperties = properties; + }; + + function filterExternalElements( elements ){ + return elements.filter(function ( element ){ + if ( element.visualAttributes().indexOf("deprecated") >= 0 ) { + // deprecated is the only attribute which has preference over external + return false; + } + + return element.attributes().indexOf("external") >= 0; + }); + } + + function setColorsForExternals( elements ){ + var iriMap = mapExternalsToBaseUri(elements); + var entries = iriMap.entries(); + + var colorScale = d3.scale.linear() + .domain([0, entries.length - 1]) + .range(_.find(COLOR_MODES, { type: colorModeType }).range) + .interpolate(d3.interpolateHsl); + + for ( var i = 0; i < entries.length; i++ ) { + var groupedElements = entries[i].value; + setBackgroundColorForElements(groupedElements, colorScale(i)); + } + } + + function mapExternalsToBaseUri( elements ){ + var map = d3.map(); + + elements.forEach(function ( element ){ + var baseIri = element.baseIri(); + + if ( !map.has(baseIri) ) { + map.set(baseIri, []); + } + map.get(baseIri).push(element); + }); + + return map; + } + + function setBackgroundColorForElements( elements, backgroundColor ){ + elements.forEach(function ( element ){ + element.backgroundColor(backgroundColor); + }); + } + + function resetBackgroundColors( elements ){ + console.log("Resetting color"); + elements.forEach(function ( element ){ + element.backgroundColor(null); + }); + } + + filter.colorModeType = function ( p ){ + if ( !arguments.length ) return colorModeType; + colorModeType = p; + return filter; + }; + + filter.enabled = function ( p ){ + if ( !arguments.length ) return enabled; + enabled = p; + return filter; + }; + + filter.reset = function (){ + enabled = DEFAULT_STATE; + }; + + + // Functions a filter must have + filter.filteredNodes = function (){ + return filteredNodes; + }; + + filter.filteredProperties = function (){ + return filteredProperties; + }; + + + return filter; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), +/* 74 */ +/***/ (function(module, exports) { + + /** + * This module abuses the filter function a bit like the statistics module. Nothing is filtered. + * + * @returns {{}} + */ + + + module.exports = function ( graph ){ + + var DEFAULT_STATE = false; + + var filter = {}, + nodes, + properties, + enabled = DEFAULT_STATE, + filteredNodes, + filteredProperties; + + + /** + * If enabled, redundant details won't be drawn anymore. + * @param untouchedNodes + * @param untouchedProperties + */ + filter.filter = function ( untouchedNodes, untouchedProperties ){ + nodes = untouchedNodes; + properties = untouchedProperties; + graph.options().compactNotation(enabled); + filteredNodes = nodes; + filteredProperties = properties; + }; + + filter.enabled = function ( p ){ + if ( !arguments.length ) return enabled; + enabled = p; + return filter; + }; + + filter.reset = function (){ + enabled = DEFAULT_STATE; + }; + + + // Functions a filter must have + filter.filteredNodes = function (){ + return filteredNodes; + }; + + filter.filteredProperties = function (){ + return filteredProperties; + }; + + + return filter; + }; + + +/***/ }), +/* 75 */ +/***/ (function(module, exports, __webpack_require__) { + + var elementTools = __webpack_require__(63)(); + var filterTools = __webpack_require__(76)(); + + module.exports = function (){ + + var filter = {}, + nodes, + properties, + enabled = false, + filteredNodes, + filteredProperties; + + + /** + * If enabled, all datatypes and literals including connected properties are filtered. + * @param untouchedNodes + * @param untouchedProperties + */ + filter.filter = function ( untouchedNodes, untouchedProperties ){ + nodes = untouchedNodes; + properties = untouchedProperties; + + if ( this.enabled() ) { + removeDatatypesAndLiterals(); + } + + filteredNodes = nodes; + filteredProperties = properties; + }; + + function removeDatatypesAndLiterals(){ + var filteredData = filterTools.filterNodesAndTidy(nodes, properties, isNoDatatypeOrLiteral); + + nodes = filteredData.nodes; + properties = filteredData.properties; + } + + function isNoDatatypeOrLiteral( node ){ + return !elementTools.isDatatype(node); + } + + filter.enabled = function ( p ){ + if ( !arguments.length ) return enabled; + enabled = p; + return filter; + }; + + + // Functions a filter must have + filter.filteredNodes = function (){ + return filteredNodes; + }; + + filter.filteredProperties = function (){ + return filteredProperties; + }; + + + return filter; + }; + + +/***/ }), +/* 76 */ +/***/ (function(module, exports, __webpack_require__) { + + var elementTools = __webpack_require__(63)(); + + module.exports = (function (){ + + var tools = {}; + + /** + * Filters the passed nodes and removes dangling properties. + * @param nodes + * @param properties + * @param shouldKeepNode function that returns true if the node should be kept + * @returns {{nodes: Array, properties: Array}} the filtered nodes and properties + */ + tools.filterNodesAndTidy = function ( nodes, properties, shouldKeepNode ){ + var removedNodes = __webpack_require__(62)(), + cleanedNodes = [], + cleanedProperties = []; + + nodes.forEach(function ( node ){ + if ( shouldKeepNode(node) ) { + cleanedNodes.push(node); + } else { + removedNodes.add(node); + } + }); + + properties.forEach(function ( property ){ + if ( propertyHasVisibleNodes(removedNodes, property) ) { + cleanedProperties.push(property); + } else if ( elementTools.isDatatypeProperty(property) ) { + // Remove floating datatypes/literals, because they belong to their datatype property + var index = cleanedNodes.indexOf(property.range()); + if ( index >= 0 ) { + cleanedNodes.splice(index, 1); + } + } + }); + + return { + nodes: cleanedNodes, + properties: cleanedProperties + }; + }; + + /** + * Returns true, if the domain and the range of this property have not been removed. + * @param removedNodes + * @param property + * @returns {boolean} true if property isn't dangling + */ + function propertyHasVisibleNodes( removedNodes, property ){ + return !removedNodes.has(property.domain()) && !removedNodes.has(property.range()); + } + + + return function (){ + return tools; + }; + })(); + + +/***/ }), +/* 77 */ +/***/ (function(module, exports, __webpack_require__) { + + var OwlDisjointWith = __webpack_require__(46); + + module.exports = function (){ + + var filter = {}, + nodes, + properties, + // According to the specification enabled by default + enabled = true, + filteredNodes, + filteredProperties; + + + /** + * If enabled, all disjoint with properties are filtered. + * @param untouchedNodes + * @param untouchedProperties + */ + filter.filter = function ( untouchedNodes, untouchedProperties ){ + nodes = untouchedNodes; + properties = untouchedProperties; + + if ( this.enabled() ) { + removeDisjointWithProperties(); + } + + filteredNodes = nodes; + filteredProperties = properties; + }; + + function removeDisjointWithProperties(){ + var cleanedProperties = [], + i, l, property; + + for ( i = 0, l = properties.length; i < l; i++ ) { + property = properties[i]; + + if ( !(property instanceof OwlDisjointWith) ) { + cleanedProperties.push(property); + } + } + + properties = cleanedProperties; + } + + filter.enabled = function ( p ){ + if ( !arguments.length ) return enabled; + enabled = p; + return filter; + }; + + + // Functions a filter must have + filter.filteredNodes = function (){ + return filteredNodes; + }; + + filter.filteredProperties = function (){ + return filteredProperties; + }; + + + return filter; + }; + + +/***/ }), +/* 78 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {module.exports = function ( graph ){ + var focuser = {}, + focusedElement; + var elementTools = webvowl.util.elementTools(); + focuser.handle = function ( selectedElement, forced ){ + // Don't display details on a drag event, which will be prevented + if ( d3.event && d3.event.defaultPrevented && forced === undefined ) { + return; + } + + if ( focusedElement !== undefined ) { + focusedElement.toggleFocus(); + } + + if ( focusedElement !== selectedElement && selectedElement ) { + selectedElement.toggleFocus(); + focusedElement = selectedElement; + } else { + focusedElement = undefined; + } + if ( focusedElement && focusedElement.focused() ) { + graph.options().editSidebar().updateSelectionInformation(focusedElement); + if ( elementTools.isProperty(selectedElement) === true ) { + var inversed = false; + if ( selectedElement.inverse() ) { + inversed = true; + } + graph.activateHoverElementsForProperties(true, selectedElement, inversed, graph.isTouchDevice()); + } + else { + graph.activateHoverElements(true, selectedElement, graph.isTouchDevice()); + } + } + else { + graph.options().editSidebar().updateSelectionInformation(undefined); + graph.removeEditElements(); + } + }; + + /** + * Removes the focus if an element is focussed. + */ + focuser.reset = function (){ + if ( focusedElement ) { + focusedElement.toggleFocus(); + focusedElement = undefined; + } + }; + + return focuser; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), +/* 79 */ +/***/ (function(module, exports) { + + /** @WORKAROUND CODE: + * clears empty literals that are provided by owl2vowl: 0.2.2x*/ + + + module.exports = function (){ + + var filter = {}, + enabled = true, + filteredNodes, + removedNodes, + filteredProperties; + + filter.enabled = function ( val ){ + if ( !arguments.length ) { + return enabled; + } + enabled = val; + }; + + filter.filter = function ( nodes, properties ){ + if ( enabled === false ) { + filteredNodes = nodes; + filteredProperties = properties; + removedNodes = []; + return; + } + var literalUsageMap = []; + var thingUsageMap = []; + var node; + for ( var i = 0; i < properties.length; i++ ) { + // get property range; + var prop = properties[i]; + + // checking for literals + if ( prop.range() ) { + node = prop.range(); + if ( node.type() === "rdfs:Literal" ) { + literalUsageMap[node.id()] = 1; + } + } + // checking for thing + if ( prop.range() ) { + node = prop.range(); + if ( node.type() === "owl:Thing" ) { + thingUsageMap[node.id()] = 1; + } + } + if ( prop.domain() ) { + node = prop.domain(); + if ( node.type() === "owl:Thing" ) { + thingUsageMap[node.id()] = 1; + } + } + + } + var nodesToRemove = []; + var newNodes = []; + // todo: test and make it faster + for ( i = 0; i < nodes.length; i++ ) { + var nodeId = nodes[i].id(); + if ( nodes[i].type() === "rdfs:Literal" ) { + if ( literalUsageMap[nodeId] === undefined ) { + nodesToRemove.push(nodeId); + } + else { + newNodes.push(nodes[i]); + } + // check for node type == OWL:THING + } else if ( nodes[i].type() === "owl:Thing" ) { + if ( thingUsageMap[nodeId] === undefined ) { + nodesToRemove.push(nodeId); + } + else { + newNodes.push(nodes[i]); + } + } else { + newNodes.push(nodes[i]); + } + } + + filteredNodes = newNodes; + filteredProperties = properties; + removedNodes = nodesToRemove; + }; + + + // Functions a filter must have + filter.filteredNodes = function (){ + return filteredNodes; + }; + + filter.removedNodes = function (){ + return removedNodes; + }; + + filter.filteredProperties = function (){ + return filteredProperties; + }; + + + return filter; + }; + + +/***/ }), +/* 80 */ +/***/ (function(module, exports, __webpack_require__) { + + var elementTools = __webpack_require__(63)(); + var filterTools = __webpack_require__(76)(); + + module.exports = function ( menu ){ + + var filter = {}, + nodes, + properties, + enabled = true, + filteredNodes, + filteredProperties, + maxDegreeSetter, + degreeGetter, + lastFiltedDegree, + degreeSetter; + + + var NODE_COUNT_LIMIT_FOR_AUTO_ENABLING = 50; + + + filter.initialize = function ( nodes, properties ){ + lastFiltedDegree = -1; + var maxLinkCount = findMaxLinkCount(nodes); + if ( maxDegreeSetter instanceof Function ) { + maxDegreeSetter(maxLinkCount); + } + + menu.setDefaultDegreeValue(findAutoDefaultDegree(nodes, properties, maxLinkCount)); + var defaultDegree = findDefaultDegree(maxLinkCount); + if ( degreeSetter instanceof Function ) { + degreeSetter(defaultDegree); + if ( defaultDegree > 0 ) { + menu.highlightForDegreeSlider(true); + menu.getGraphObject().setFilterWarning(true); + + } + } else { + console.error("No degree setter function set."); + } + }; + + function findAutoDefaultDegree( nodes, properties, maxDegree ){ + for ( var degree = 0; degree < maxDegree; degree++ ) { + var filteredData = filterByNodeDegree(nodes, properties, degree); + + if ( filteredData.nodes.length <= NODE_COUNT_LIMIT_FOR_AUTO_ENABLING ) { + return degree; + } + } + return 0; + } + + function findDefaultDegree( maxDegree ){ + var globalDegOfFilter = menu.getGraphObject().getGlobalDOF(); + if ( globalDegOfFilter >= 0 ) { + if ( globalDegOfFilter <= maxDegree ) { + return globalDegOfFilter; + } else { + menu.getGraphObject().setGlobalDOF(maxDegree); + return maxDegree; + } + } + return menu.getDefaultDegreeValue(); + } + + /** + * If enabled, all nodes are filter by their node degree. + * @param untouchedNodes + * @param untouchedProperties + */ + filter.filter = function ( untouchedNodes, untouchedProperties ){ + nodes = untouchedNodes; + properties = untouchedProperties; + + if ( this.enabled() ) { + if ( degreeGetter instanceof Function ) { + filterByNodeDegreeAndApply(degreeGetter()); + } else { + console.error("No degree query function set."); + } + } + + filteredNodes = nodes; + filteredProperties = properties; + + if ( filteredNodes.length === 0 ) { + degreeSetter(0); + filteredNodes = untouchedNodes; + filteredProperties = untouchedProperties; + } + lastFiltedDegree = degreeGetter(); + }; + + function findMaxLinkCount( nodes ){ + var maxLinkCount = 0; + for ( var i = 0, l = nodes.length; i < l; i++ ) { + var linksWithoutDatatypes = filterOutDatatypes(nodes[i].links()); + + maxLinkCount = Math.max(maxLinkCount, linksWithoutDatatypes.length); + } + return maxLinkCount; + } + + function filterOutDatatypes( links ){ + return links.filter(function ( link ){ + return !elementTools.isDatatypeProperty(link.property()); + }); + } + + function filterByNodeDegreeAndApply( minDegree ){ + var filteredData = filterByNodeDegree(nodes, properties, minDegree); + nodes = filteredData.nodes; + properties = filteredData.properties; + } + + function filterByNodeDegree( nodes, properties, minDegree ){ + return filterTools.filterNodesAndTidy(nodes, properties, hasRequiredDegree(minDegree)); + } + + function hasRequiredDegree( minDegree ){ + return function ( node ){ + return filterOutDatatypes(node.links()).length >= minDegree; + }; + } + + filter.setMaxDegreeSetter = function ( _maxDegreeSetter ){ + maxDegreeSetter = _maxDegreeSetter; + }; + + filter.setDegreeGetter = function ( _degreeGetter ){ + degreeGetter = _degreeGetter; + }; + + filter.setDegreeSetter = function ( _degreeSetter ){ + degreeSetter = _degreeSetter; + }; + + filter.enabled = function ( p ){ + if ( !arguments.length ) return enabled; + enabled = p; + return filter; + }; + + + // Functions a filter must have + filter.filteredNodes = function (){ + return filteredNodes; + }; + + filter.filteredProperties = function (){ + return filteredProperties; + }; + + + return filter; + }; + + +/***/ }), +/* 81 */ +/***/ (function(module, exports) { + + /** + * This module abuses the filter function a bit like the statistics module. Nothing is filtered. + * + * @returns {{}} + */ + module.exports = function ( graph ){ + + var DEFAULT_STATE = true; + + var filter = {}, + nodes, + properties, + enabled = DEFAULT_STATE, + filteredNodes, + filteredProperties; + + + /** + * If enabled, the scaling of nodes according to individuals will be enabled. + * @param untouchedNodes + * @param untouchedProperties + */ + filter.filter = function ( untouchedNodes, untouchedProperties ){ + nodes = untouchedNodes; + properties = untouchedProperties; + + graph.options().scaleNodesByIndividuals(enabled); + + filteredNodes = nodes; + filteredProperties = properties; + }; + + filter.enabled = function ( p ){ + if ( !arguments.length ) return enabled; + enabled = p; + return filter; + }; + + filter.reset = function (){ + enabled = DEFAULT_STATE; + }; + + + // Functions a filter must have + filter.filteredNodes = function (){ + return filteredNodes; + }; + + filter.filteredProperties = function (){ + return filteredProperties; + }; + + + return filter; + }; + + +/***/ }), +/* 82 */ +/***/ (function(module, exports, __webpack_require__) { + + var elementTools = __webpack_require__(63)(); + + + module.exports = function (){ + + var filter = {}, + nodes, + properties, + enabled = false, + filteredNodes, + filteredProperties; + + + /** + * If enabled, all object properties and things without any other property are filtered. + * @param untouchedNodes + * @param untouchedProperties + */ + filter.filter = function ( untouchedNodes, untouchedProperties ){ + nodes = untouchedNodes; + properties = untouchedProperties; + + if ( this.enabled() ) { + removeObjectProperties(); + } + + filteredNodes = nodes; + filteredProperties = properties; + }; + + function removeObjectProperties(){ + properties = properties.filter(isNoObjectProperty); + nodes = nodes.filter(isNoFloatingThing); + } + + function isNoObjectProperty( property ){ + return !elementTools.isObjectProperty(property); + } + + function isNoFloatingThing( node ){ + var isNoThing = !elementTools.isThing(node); + var hasNonFilteredProperties = hasPropertiesOtherThanObjectProperties(node, properties); + return isNoThing || hasNonFilteredProperties; + } + + function hasPropertiesOtherThanObjectProperties( node, properties ){ + for ( var i = 0; i < properties.length; i++ ) { + var property = properties[i]; + if ( property.domain() !== node && property.range() !== node ) { + continue; + } + + if ( isNoObjectProperty(property) ) { + return true; + } + } + + return false; + } + + filter.enabled = function ( p ){ + if ( !arguments.length ) return enabled; + enabled = p; + return filter; + }; + + + // Functions a filter must have + filter.filteredNodes = function (){ + return filteredNodes; + }; + + filter.filteredProperties = function (){ + return filteredProperties; + }; + + + return filter; + }; + + +/***/ }), +/* 83 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {var _ = __webpack_require__(84); + var elementTools = __webpack_require__(63)(); + + module.exports = function (){ + var pap = {}, + enabled = false, + pinnedElements = []; + + pap.addPinnedElement = function ( element ){ + // check if element is already in list + var indexInArray = pinnedElements.indexOf(element); + if ( indexInArray === -1 ) { + pinnedElements.push(element); + } + }; + + pap.handle = function ( selection, forced ){ + if ( !enabled ) { + return; + } + + if ( !forced ) { + if ( wasNotDragged() ) { + return; + } + } + if ( elementTools.isProperty(selection) ) { + if ( selection.inverse() && selection.inverse().pinned() ) { + return; + } else if ( hasNoParallelProperties(selection) ) { + return; + } + } + + if ( !selection.pinned() ) { + selection.drawPin(); + pap.addPinnedElement(selection); + } + }; + + function wasNotDragged(){ + return !d3.event.defaultPrevented; + } + + function hasNoParallelProperties( property ){ + return _.intersection(property.domain().links(), property.range().links()).length === 1; + } + + pap.enabled = function ( p ){ + if ( !arguments.length ) return enabled; + enabled = p; + return pap; + }; + + pap.reset = function (){ + pinnedElements.forEach(function ( element ){ + element.removePin(); + }); + // Clear the array of stored nodes + pinnedElements.length = 0; + }; + + return pap; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), +/* 84 */ +/***/ (function(module, exports, __webpack_require__) { + + module.exports = { + 'chunk': __webpack_require__(85), + 'compact': __webpack_require__(105), + 'concat': __webpack_require__(106), + 'difference': __webpack_require__(114), + 'differenceBy': __webpack_require__(167), + 'differenceWith': __webpack_require__(229), + 'drop': __webpack_require__(230), + 'dropRight': __webpack_require__(231), + 'dropRightWhile': __webpack_require__(232), + 'dropWhile': __webpack_require__(234), + 'fill': __webpack_require__(235), + 'findIndex': __webpack_require__(239), + 'findLastIndex': __webpack_require__(240), + 'first': __webpack_require__(241), + 'flatten': __webpack_require__(243), + 'flattenDeep': __webpack_require__(244), + 'flattenDepth': __webpack_require__(245), + 'fromPairs': __webpack_require__(246), + 'head': __webpack_require__(242), + 'indexOf': __webpack_require__(247), + 'initial': __webpack_require__(248), + 'intersection': __webpack_require__(249), + 'intersectionBy': __webpack_require__(252), + 'intersectionWith': __webpack_require__(253), + 'join': __webpack_require__(254), + 'last': __webpack_require__(228), + 'lastIndexOf': __webpack_require__(255), + 'nth': __webpack_require__(257), + 'pull': __webpack_require__(259), + 'pullAll': __webpack_require__(260), + 'pullAllBy': __webpack_require__(263), + 'pullAllWith': __webpack_require__(264), + 'pullAt': __webpack_require__(265), + 'remove': __webpack_require__(272), + 'reverse': __webpack_require__(273), + 'slice': __webpack_require__(274), + 'sortedIndex': __webpack_require__(275), + 'sortedIndexBy': __webpack_require__(278), + 'sortedIndexOf': __webpack_require__(279), + 'sortedLastIndex': __webpack_require__(280), + 'sortedLastIndexBy': __webpack_require__(281), + 'sortedLastIndexOf': __webpack_require__(282), + 'sortedUniq': __webpack_require__(283), + 'sortedUniqBy': __webpack_require__(285), + 'tail': __webpack_require__(286), + 'take': __webpack_require__(287), + 'takeRight': __webpack_require__(288), + 'takeRightWhile': __webpack_require__(289), + 'takeWhile': __webpack_require__(290), + 'union': __webpack_require__(291), + 'unionBy': __webpack_require__(295), + 'unionWith': __webpack_require__(296), + 'uniq': __webpack_require__(297), + 'uniqBy': __webpack_require__(298), + 'uniqWith': __webpack_require__(299), + 'unzip': __webpack_require__(300), + 'unzipWith': __webpack_require__(301), + 'without': __webpack_require__(302), + 'xor': __webpack_require__(303), + 'xorBy': __webpack_require__(305), + 'xorWith': __webpack_require__(306), + 'zip': __webpack_require__(307), + 'zipObject': __webpack_require__(308), + 'zipObjectDeep': __webpack_require__(312), + 'zipWith': __webpack_require__(314) + }; + + +/***/ }), +/* 85 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseSlice = __webpack_require__(86), + isIterateeCall = __webpack_require__(87), + toInteger = __webpack_require__(100); + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeCeil = Math.ceil, + nativeMax = Math.max; + + /** + * Creates an array of elements split into groups the length of `size`. + * If `array` can't be split evenly, the final chunk will be the remaining + * elements. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to process. + * @param {number} [size=1] The length of each chunk + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the new array of chunks. + * @example + * + * _.chunk(['a', 'b', 'c', 'd'], 2); + * // => [['a', 'b'], ['c', 'd']] + * + * _.chunk(['a', 'b', 'c', 'd'], 3); + * // => [['a', 'b', 'c'], ['d']] + */ + function chunk(array, size, guard) { + if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) { + size = 1; + } else { + size = nativeMax(toInteger(size), 0); + } + var length = array == null ? 0 : array.length; + if (!length || size < 1) { + return []; + } + var index = 0, + resIndex = 0, + result = Array(nativeCeil(length / size)); + + while (index < length) { + result[resIndex++] = baseSlice(array, index, (index += size)); + } + return result; + } + + module.exports = chunk; + + +/***/ }), +/* 86 */ +/***/ (function(module, exports) { + + /** + * The base implementation of `_.slice` without an iteratee call guard. + * + * @private + * @param {Array} array The array to slice. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the slice of `array`. + */ + function baseSlice(array, start, end) { + var index = -1, + length = array.length; + + if (start < 0) { + start = -start > length ? 0 : (length + start); + } + end = end > length ? length : end; + if (end < 0) { + end += length; + } + length = start > end ? 0 : ((end - start) >>> 0); + start >>>= 0; + + var result = Array(length); + while (++index < length) { + result[index] = array[index + start]; + } + return result; + } + + module.exports = baseSlice; + + +/***/ }), +/* 87 */ +/***/ (function(module, exports, __webpack_require__) { + + var eq = __webpack_require__(88), + isArrayLike = __webpack_require__(89), + isIndex = __webpack_require__(99), + isObject = __webpack_require__(97); + + /** + * Checks if the given arguments are from an iteratee call. + * + * @private + * @param {*} value The potential iteratee value argument. + * @param {*} index The potential iteratee index or key argument. + * @param {*} object The potential iteratee object argument. + * @returns {boolean} Returns `true` if the arguments are from an iteratee call, + * else `false`. + */ + function isIterateeCall(value, index, object) { + if (!isObject(object)) { + return false; + } + var type = typeof index; + if (type == 'number' + ? (isArrayLike(object) && isIndex(index, object.length)) + : (type == 'string' && index in object) + ) { + return eq(object[index], value); + } + return false; + } + + module.exports = isIterateeCall; + + +/***/ }), +/* 88 */ +/***/ (function(module, exports) { + + /** + * Performs a + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * comparison between two values to determine if they are equivalent. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.eq(object, object); + * // => true + * + * _.eq(object, other); + * // => false + * + * _.eq('a', 'a'); + * // => true + * + * _.eq('a', Object('a')); + * // => false + * + * _.eq(NaN, NaN); + * // => true + */ + function eq(value, other) { + return value === other || (value !== value && other !== other); + } + + module.exports = eq; + + +/***/ }), +/* 89 */ +/***/ (function(module, exports, __webpack_require__) { + + var isFunction = __webpack_require__(90), + isLength = __webpack_require__(98); + + /** + * Checks if `value` is array-like. A value is considered array-like if it's + * not a function and has a `value.length` that's an integer greater than or + * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is array-like, else `false`. + * @example + * + * _.isArrayLike([1, 2, 3]); + * // => true + * + * _.isArrayLike(document.body.children); + * // => true + * + * _.isArrayLike('abc'); + * // => true + * + * _.isArrayLike(_.noop); + * // => false + */ + function isArrayLike(value) { + return value != null && isLength(value.length) && !isFunction(value); + } + + module.exports = isArrayLike; + + +/***/ }), +/* 90 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseGetTag = __webpack_require__(91), + isObject = __webpack_require__(97); + + /** `Object#toString` result references. */ + var asyncTag = '[object AsyncFunction]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + proxyTag = '[object Proxy]'; + + /** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a function, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ + function isFunction(value) { + if (!isObject(value)) { + return false; + } + // The use of `Object#toString` avoids issues with the `typeof` operator + // in Safari 9 which returns 'object' for typed arrays and other constructors. + var tag = baseGetTag(value); + return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; + } + + module.exports = isFunction; + + +/***/ }), +/* 91 */ +/***/ (function(module, exports, __webpack_require__) { + + var Symbol = __webpack_require__(92), + getRawTag = __webpack_require__(95), + objectToString = __webpack_require__(96); + + /** `Object#toString` result references. */ + var nullTag = '[object Null]', + undefinedTag = '[object Undefined]'; + + /** Built-in value references. */ + var symToStringTag = Symbol ? Symbol.toStringTag : undefined; + + /** + * The base implementation of `getTag` without fallbacks for buggy environments. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ + function baseGetTag(value) { + if (value == null) { + return value === undefined ? undefinedTag : nullTag; + } + return (symToStringTag && symToStringTag in Object(value)) + ? getRawTag(value) + : objectToString(value); + } + + module.exports = baseGetTag; + + +/***/ }), +/* 92 */ +/***/ (function(module, exports, __webpack_require__) { + + var root = __webpack_require__(93); + + /** Built-in value references. */ + var Symbol = root.Symbol; + + module.exports = Symbol; + + +/***/ }), +/* 93 */ +/***/ (function(module, exports, __webpack_require__) { + + var freeGlobal = __webpack_require__(94); + + /** Detect free variable `self`. */ + var freeSelf = typeof self == 'object' && self && self.Object === Object && self; + + /** Used as a reference to the global object. */ + var root = freeGlobal || freeSelf || Function('return this')(); + + module.exports = root; + + +/***/ }), +/* 94 */ +/***/ (function(module, exports) { + + /* WEBPACK VAR INJECTION */(function(global) {/** Detect free variable `global` from Node.js. */ + var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; + + module.exports = freeGlobal; + + /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }()))) + +/***/ }), +/* 95 */ +/***/ (function(module, exports, __webpack_require__) { + + var Symbol = __webpack_require__(92); + + /** Used for built-in method references. */ + var objectProto = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty = objectProto.hasOwnProperty; + + /** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ + var nativeObjectToString = objectProto.toString; + + /** Built-in value references. */ + var symToStringTag = Symbol ? Symbol.toStringTag : undefined; + + /** + * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the raw `toStringTag`. + */ + function getRawTag(value) { + var isOwn = hasOwnProperty.call(value, symToStringTag), + tag = value[symToStringTag]; + + try { + value[symToStringTag] = undefined; + var unmasked = true; + } catch (e) {} + + var result = nativeObjectToString.call(value); + if (unmasked) { + if (isOwn) { + value[symToStringTag] = tag; + } else { + delete value[symToStringTag]; + } + } + return result; + } + + module.exports = getRawTag; + + +/***/ }), +/* 96 */ +/***/ (function(module, exports) { + + /** Used for built-in method references. */ + var objectProto = Object.prototype; + + /** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ + var nativeObjectToString = objectProto.toString; + + /** + * Converts `value` to a string using `Object.prototype.toString`. + * + * @private + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + */ + function objectToString(value) { + return nativeObjectToString.call(value); + } + + module.exports = objectToString; + + +/***/ }), +/* 97 */ +/***/ (function(module, exports) { + + /** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ + function isObject(value) { + var type = typeof value; + return value != null && (type == 'object' || type == 'function'); + } + + module.exports = isObject; + + +/***/ }), +/* 98 */ +/***/ (function(module, exports) { + + /** Used as references for various `Number` constants. */ + var MAX_SAFE_INTEGER = 9007199254740991; + + /** + * Checks if `value` is a valid array-like length. + * + * **Note:** This method is loosely based on + * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. + * @example + * + * _.isLength(3); + * // => true + * + * _.isLength(Number.MIN_VALUE); + * // => false + * + * _.isLength(Infinity); + * // => false + * + * _.isLength('3'); + * // => false + */ + function isLength(value) { + return typeof value == 'number' && + value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; + } + + module.exports = isLength; + + +/***/ }), +/* 99 */ +/***/ (function(module, exports) { + + /** Used as references for various `Number` constants. */ + var MAX_SAFE_INTEGER = 9007199254740991; + + /** Used to detect unsigned integer values. */ + var reIsUint = /^(?:0|[1-9]\d*)$/; + + /** + * Checks if `value` is a valid array-like index. + * + * @private + * @param {*} value The value to check. + * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. + * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. + */ + function isIndex(value, length) { + var type = typeof value; + length = length == null ? MAX_SAFE_INTEGER : length; + + return !!length && + (type == 'number' || + (type != 'symbol' && reIsUint.test(value))) && + (value > -1 && value % 1 == 0 && value < length); + } + + module.exports = isIndex; + + +/***/ }), +/* 100 */ +/***/ (function(module, exports, __webpack_require__) { + + var toFinite = __webpack_require__(101); + + /** + * Converts `value` to an integer. + * + * **Note:** This method is loosely based on + * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toInteger(3.2); + * // => 3 + * + * _.toInteger(Number.MIN_VALUE); + * // => 0 + * + * _.toInteger(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toInteger('3.2'); + * // => 3 + */ + function toInteger(value) { + var result = toFinite(value), + remainder = result % 1; + + return result === result ? (remainder ? result - remainder : result) : 0; + } + + module.exports = toInteger; + + +/***/ }), +/* 101 */ +/***/ (function(module, exports, __webpack_require__) { + + var toNumber = __webpack_require__(102); + + /** Used as references for various `Number` constants. */ + var INFINITY = 1 / 0, + MAX_INTEGER = 1.7976931348623157e+308; + + /** + * Converts `value` to a finite number. + * + * @static + * @memberOf _ + * @since 4.12.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted number. + * @example + * + * _.toFinite(3.2); + * // => 3.2 + * + * _.toFinite(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toFinite(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toFinite('3.2'); + * // => 3.2 + */ + function toFinite(value) { + if (!value) { + return value === 0 ? value : 0; + } + value = toNumber(value); + if (value === INFINITY || value === -INFINITY) { + var sign = (value < 0 ? -1 : 1); + return sign * MAX_INTEGER; + } + return value === value ? value : 0; + } + + module.exports = toFinite; + + +/***/ }), +/* 102 */ +/***/ (function(module, exports, __webpack_require__) { + + var isObject = __webpack_require__(97), + isSymbol = __webpack_require__(103); + + /** Used as references for various `Number` constants. */ + var NAN = 0 / 0; + + /** Used to match leading and trailing whitespace. */ + var reTrim = /^\s+|\s+$/g; + + /** Used to detect bad signed hexadecimal string values. */ + var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; + + /** Used to detect binary string values. */ + var reIsBinary = /^0b[01]+$/i; + + /** Used to detect octal string values. */ + var reIsOctal = /^0o[0-7]+$/i; + + /** Built-in method references without a dependency on `root`. */ + var freeParseInt = parseInt; + + /** + * Converts `value` to a number. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {number} Returns the number. + * @example + * + * _.toNumber(3.2); + * // => 3.2 + * + * _.toNumber(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toNumber(Infinity); + * // => Infinity + * + * _.toNumber('3.2'); + * // => 3.2 + */ + function toNumber(value) { + if (typeof value == 'number') { + return value; + } + if (isSymbol(value)) { + return NAN; + } + if (isObject(value)) { + var other = typeof value.valueOf == 'function' ? value.valueOf() : value; + value = isObject(other) ? (other + '') : other; + } + if (typeof value != 'string') { + return value === 0 ? value : +value; + } + value = value.replace(reTrim, ''); + var isBinary = reIsBinary.test(value); + return (isBinary || reIsOctal.test(value)) + ? freeParseInt(value.slice(2), isBinary ? 2 : 8) + : (reIsBadHex.test(value) ? NAN : +value); + } + + module.exports = toNumber; + + +/***/ }), +/* 103 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseGetTag = __webpack_require__(91), + isObjectLike = __webpack_require__(104); + + /** `Object#toString` result references. */ + var symbolTag = '[object Symbol]'; + + /** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ + function isSymbol(value) { + return typeof value == 'symbol' || + (isObjectLike(value) && baseGetTag(value) == symbolTag); + } + + module.exports = isSymbol; + + +/***/ }), +/* 104 */ +/***/ (function(module, exports) { + + /** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ + function isObjectLike(value) { + return value != null && typeof value == 'object'; + } + + module.exports = isObjectLike; + + +/***/ }), +/* 105 */ +/***/ (function(module, exports) { + + /** + * Creates an array with all falsey values removed. The values `false`, `null`, + * `0`, `""`, `undefined`, and `NaN` are falsey. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to compact. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.compact([0, 1, false, 2, '', 3]); + * // => [1, 2, 3] + */ + function compact(array) { + var index = -1, + length = array == null ? 0 : array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (value) { + result[resIndex++] = value; + } + } + return result; + } + + module.exports = compact; + + +/***/ }), +/* 106 */ +/***/ (function(module, exports, __webpack_require__) { + + var arrayPush = __webpack_require__(107), + baseFlatten = __webpack_require__(108), + copyArray = __webpack_require__(113), + isArray = __webpack_require__(112); + + /** + * Creates a new array concatenating `array` with any additional arrays + * and/or values. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to concatenate. + * @param {...*} [values] The values to concatenate. + * @returns {Array} Returns the new concatenated array. + * @example + * + * var array = [1]; + * var other = _.concat(array, 2, [3], [[4]]); + * + * console.log(other); + * // => [1, 2, 3, [4]] + * + * console.log(array); + * // => [1] + */ + function concat() { + var length = arguments.length; + if (!length) { + return []; + } + var args = Array(length - 1), + array = arguments[0], + index = length; + + while (index--) { + args[index - 1] = arguments[index]; + } + return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1)); + } + + module.exports = concat; + + +/***/ }), +/* 107 */ +/***/ (function(module, exports) { + + /** + * Appends the elements of `values` to `array`. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to append. + * @returns {Array} Returns `array`. + */ + function arrayPush(array, values) { + var index = -1, + length = values.length, + offset = array.length; + + while (++index < length) { + array[offset + index] = values[index]; + } + return array; + } + + module.exports = arrayPush; + + +/***/ }), +/* 108 */ +/***/ (function(module, exports, __webpack_require__) { + + var arrayPush = __webpack_require__(107), + isFlattenable = __webpack_require__(109); + + /** + * The base implementation of `_.flatten` with support for restricting flattening. + * + * @private + * @param {Array} array The array to flatten. + * @param {number} depth The maximum recursion depth. + * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. + * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. + * @param {Array} [result=[]] The initial result value. + * @returns {Array} Returns the new flattened array. + */ + function baseFlatten(array, depth, predicate, isStrict, result) { + var index = -1, + length = array.length; + + predicate || (predicate = isFlattenable); + result || (result = []); + + while (++index < length) { + var value = array[index]; + if (depth > 0 && predicate(value)) { + if (depth > 1) { + // Recursively flatten arrays (susceptible to call stack limits). + baseFlatten(value, depth - 1, predicate, isStrict, result); + } else { + arrayPush(result, value); + } + } else if (!isStrict) { + result[result.length] = value; + } + } + return result; + } + + module.exports = baseFlatten; + + +/***/ }), +/* 109 */ +/***/ (function(module, exports, __webpack_require__) { + + var Symbol = __webpack_require__(92), + isArguments = __webpack_require__(110), + isArray = __webpack_require__(112); + + /** Built-in value references. */ + var spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined; + + /** + * Checks if `value` is a flattenable `arguments` object or array. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. + */ + function isFlattenable(value) { + return isArray(value) || isArguments(value) || + !!(spreadableSymbol && value && value[spreadableSymbol]); + } + + module.exports = isFlattenable; + + +/***/ }), +/* 110 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseIsArguments = __webpack_require__(111), + isObjectLike = __webpack_require__(104); + + /** Used for built-in method references. */ + var objectProto = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty = objectProto.hasOwnProperty; + + /** Built-in value references. */ + var propertyIsEnumerable = objectProto.propertyIsEnumerable; + + /** + * Checks if `value` is likely an `arguments` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + * else `false`. + * @example + * + * _.isArguments(function() { return arguments; }()); + * // => true + * + * _.isArguments([1, 2, 3]); + * // => false + */ + var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { + return isObjectLike(value) && hasOwnProperty.call(value, 'callee') && + !propertyIsEnumerable.call(value, 'callee'); + }; + + module.exports = isArguments; + + +/***/ }), +/* 111 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseGetTag = __webpack_require__(91), + isObjectLike = __webpack_require__(104); + + /** `Object#toString` result references. */ + var argsTag = '[object Arguments]'; + + /** + * The base implementation of `_.isArguments`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + */ + function baseIsArguments(value) { + return isObjectLike(value) && baseGetTag(value) == argsTag; + } + + module.exports = baseIsArguments; + + +/***/ }), +/* 112 */ +/***/ (function(module, exports) { + + /** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(document.body.children); + * // => false + * + * _.isArray('abc'); + * // => false + * + * _.isArray(_.noop); + * // => false + */ + var isArray = Array.isArray; + + module.exports = isArray; + + +/***/ }), +/* 113 */ +/***/ (function(module, exports) { + + /** + * Copies the values of `source` to `array`. + * + * @private + * @param {Array} source The array to copy values from. + * @param {Array} [array=[]] The array to copy values to. + * @returns {Array} Returns `array`. + */ + function copyArray(source, array) { + var index = -1, + length = source.length; + + array || (array = Array(length)); + while (++index < length) { + array[index] = source[index]; + } + return array; + } + + module.exports = copyArray; + + +/***/ }), +/* 114 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseDifference = __webpack_require__(115), + baseFlatten = __webpack_require__(108), + baseRest = __webpack_require__(157), + isArrayLikeObject = __webpack_require__(166); + + /** + * Creates an array of `array` values not included in the other given arrays + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. The order and references of result values are + * determined by the first array. + * + * **Note:** Unlike `_.pullAll`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {...Array} [values] The values to exclude. + * @returns {Array} Returns the new array of filtered values. + * @see _.without, _.xor + * @example + * + * _.difference([2, 1], [2, 3]); + * // => [1] + */ + var difference = baseRest(function(array, values) { + return isArrayLikeObject(array) + ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true)) + : []; + }); + + module.exports = difference; + + +/***/ }), +/* 115 */ +/***/ (function(module, exports, __webpack_require__) { + + var SetCache = __webpack_require__(116), + arrayIncludes = __webpack_require__(148), + arrayIncludesWith = __webpack_require__(153), + arrayMap = __webpack_require__(154), + baseUnary = __webpack_require__(155), + cacheHas = __webpack_require__(156); + + /** Used as the size to enable large array optimizations. */ + var LARGE_ARRAY_SIZE = 200; + + /** + * The base implementation of methods like `_.difference` without support + * for excluding multiple arrays or iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Array} values The values to exclude. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of filtered values. + */ + function baseDifference(array, values, iteratee, comparator) { + var index = -1, + includes = arrayIncludes, + isCommon = true, + length = array.length, + result = [], + valuesLength = values.length; + + if (!length) { + return result; + } + if (iteratee) { + values = arrayMap(values, baseUnary(iteratee)); + } + if (comparator) { + includes = arrayIncludesWith; + isCommon = false; + } + else if (values.length >= LARGE_ARRAY_SIZE) { + includes = cacheHas; + isCommon = false; + values = new SetCache(values); + } + outer: + while (++index < length) { + var value = array[index], + computed = iteratee == null ? value : iteratee(value); + + value = (comparator || value !== 0) ? value : 0; + if (isCommon && computed === computed) { + var valuesIndex = valuesLength; + while (valuesIndex--) { + if (values[valuesIndex] === computed) { + continue outer; + } + } + result.push(value); + } + else if (!includes(values, computed, comparator)) { + result.push(value); + } + } + return result; + } + + module.exports = baseDifference; + + +/***/ }), +/* 116 */ +/***/ (function(module, exports, __webpack_require__) { + + var MapCache = __webpack_require__(117), + setCacheAdd = __webpack_require__(146), + setCacheHas = __webpack_require__(147); + + /** + * + * Creates an array cache object to store unique values. + * + * @private + * @constructor + * @param {Array} [values] The values to cache. + */ + function SetCache(values) { + var index = -1, + length = values == null ? 0 : values.length; + + this.__data__ = new MapCache; + while (++index < length) { + this.add(values[index]); + } + } + + // Add methods to `SetCache`. + SetCache.prototype.add = SetCache.prototype.push = setCacheAdd; + SetCache.prototype.has = setCacheHas; + + module.exports = SetCache; + + +/***/ }), +/* 117 */ +/***/ (function(module, exports, __webpack_require__) { + + var mapCacheClear = __webpack_require__(118), + mapCacheDelete = __webpack_require__(140), + mapCacheGet = __webpack_require__(143), + mapCacheHas = __webpack_require__(144), + mapCacheSet = __webpack_require__(145); + + /** + * Creates a map cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ + function MapCache(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } + } + + // Add methods to `MapCache`. + MapCache.prototype.clear = mapCacheClear; + MapCache.prototype['delete'] = mapCacheDelete; + MapCache.prototype.get = mapCacheGet; + MapCache.prototype.has = mapCacheHas; + MapCache.prototype.set = mapCacheSet; + + module.exports = MapCache; + + +/***/ }), +/* 118 */ +/***/ (function(module, exports, __webpack_require__) { + + var Hash = __webpack_require__(119), + ListCache = __webpack_require__(132), + Map = __webpack_require__(139); + + /** + * Removes all key-value entries from the map. + * + * @private + * @name clear + * @memberOf MapCache + */ + function mapCacheClear() { + this.size = 0; + this.__data__ = { + 'hash': new Hash, + 'map': new (Map || ListCache), + 'string': new Hash + }; + } + + module.exports = mapCacheClear; + + +/***/ }), +/* 119 */ +/***/ (function(module, exports, __webpack_require__) { + + var hashClear = __webpack_require__(120), + hashDelete = __webpack_require__(128), + hashGet = __webpack_require__(129), + hashHas = __webpack_require__(130), + hashSet = __webpack_require__(131); + + /** + * Creates a hash object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ + function Hash(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } + } + + // Add methods to `Hash`. + Hash.prototype.clear = hashClear; + Hash.prototype['delete'] = hashDelete; + Hash.prototype.get = hashGet; + Hash.prototype.has = hashHas; + Hash.prototype.set = hashSet; + + module.exports = Hash; + + +/***/ }), +/* 120 */ +/***/ (function(module, exports, __webpack_require__) { + + var nativeCreate = __webpack_require__(121); + + /** + * Removes all key-value entries from the hash. + * + * @private + * @name clear + * @memberOf Hash + */ + function hashClear() { + this.__data__ = nativeCreate ? nativeCreate(null) : {}; + this.size = 0; + } + + module.exports = hashClear; + + +/***/ }), +/* 121 */ +/***/ (function(module, exports, __webpack_require__) { + + var getNative = __webpack_require__(122); + + /* Built-in method references that are verified to be native. */ + var nativeCreate = getNative(Object, 'create'); + + module.exports = nativeCreate; + + +/***/ }), +/* 122 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseIsNative = __webpack_require__(123), + getValue = __webpack_require__(127); + + /** + * Gets the native function at `key` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the method to get. + * @returns {*} Returns the function if it's native, else `undefined`. + */ + function getNative(object, key) { + var value = getValue(object, key); + return baseIsNative(value) ? value : undefined; + } + + module.exports = getNative; + + +/***/ }), +/* 123 */ +/***/ (function(module, exports, __webpack_require__) { + + var isFunction = __webpack_require__(90), + isMasked = __webpack_require__(124), + isObject = __webpack_require__(97), + toSource = __webpack_require__(126); + + /** + * Used to match `RegExp` + * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). + */ + var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; + + /** Used to detect host constructors (Safari). */ + var reIsHostCtor = /^\[object .+?Constructor\]$/; + + /** Used for built-in method references. */ + var funcProto = Function.prototype, + objectProto = Object.prototype; + + /** Used to resolve the decompiled source of functions. */ + var funcToString = funcProto.toString; + + /** Used to check objects for own properties. */ + var hasOwnProperty = objectProto.hasOwnProperty; + + /** Used to detect if a method is native. */ + var reIsNative = RegExp('^' + + funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&') + .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' + ); + + /** + * The base implementation of `_.isNative` without bad shim checks. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, + * else `false`. + */ + function baseIsNative(value) { + if (!isObject(value) || isMasked(value)) { + return false; + } + var pattern = isFunction(value) ? reIsNative : reIsHostCtor; + return pattern.test(toSource(value)); + } + + module.exports = baseIsNative; + + +/***/ }), +/* 124 */ +/***/ (function(module, exports, __webpack_require__) { + + var coreJsData = __webpack_require__(125); + + /** Used to detect methods masquerading as native. */ + var maskSrcKey = (function() { + var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); + return uid ? ('Symbol(src)_1.' + uid) : ''; + }()); + + /** + * Checks if `func` has its source masked. + * + * @private + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` is masked, else `false`. + */ + function isMasked(func) { + return !!maskSrcKey && (maskSrcKey in func); + } + + module.exports = isMasked; + + +/***/ }), +/* 125 */ +/***/ (function(module, exports, __webpack_require__) { + + var root = __webpack_require__(93); + + /** Used to detect overreaching core-js shims. */ + var coreJsData = root['__core-js_shared__']; + + module.exports = coreJsData; + + +/***/ }), +/* 126 */ +/***/ (function(module, exports) { + + /** Used for built-in method references. */ + var funcProto = Function.prototype; + + /** Used to resolve the decompiled source of functions. */ + var funcToString = funcProto.toString; + + /** + * Converts `func` to its source code. + * + * @private + * @param {Function} func The function to convert. + * @returns {string} Returns the source code. + */ + function toSource(func) { + if (func != null) { + try { + return funcToString.call(func); + } catch (e) {} + try { + return (func + ''); + } catch (e) {} + } + return ''; + } + + module.exports = toSource; + + +/***/ }), +/* 127 */ +/***/ (function(module, exports) { + + /** + * Gets the value at `key` of `object`. + * + * @private + * @param {Object} [object] The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */ + function getValue(object, key) { + return object == null ? undefined : object[key]; + } + + module.exports = getValue; + + +/***/ }), +/* 128 */ +/***/ (function(module, exports) { + + /** + * Removes `key` and its value from the hash. + * + * @private + * @name delete + * @memberOf Hash + * @param {Object} hash The hash to modify. + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function hashDelete(key) { + var result = this.has(key) && delete this.__data__[key]; + this.size -= result ? 1 : 0; + return result; + } + + module.exports = hashDelete; + + +/***/ }), +/* 129 */ +/***/ (function(module, exports, __webpack_require__) { + + var nativeCreate = __webpack_require__(121); + + /** Used to stand-in for `undefined` hash values. */ + var HASH_UNDEFINED = '__lodash_hash_undefined__'; + + /** Used for built-in method references. */ + var objectProto = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty = objectProto.hasOwnProperty; + + /** + * Gets the hash value for `key`. + * + * @private + * @name get + * @memberOf Hash + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function hashGet(key) { + var data = this.__data__; + if (nativeCreate) { + var result = data[key]; + return result === HASH_UNDEFINED ? undefined : result; + } + return hasOwnProperty.call(data, key) ? data[key] : undefined; + } + + module.exports = hashGet; + + +/***/ }), +/* 130 */ +/***/ (function(module, exports, __webpack_require__) { + + var nativeCreate = __webpack_require__(121); + + /** Used for built-in method references. */ + var objectProto = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty = objectProto.hasOwnProperty; + + /** + * Checks if a hash value for `key` exists. + * + * @private + * @name has + * @memberOf Hash + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function hashHas(key) { + var data = this.__data__; + return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key); + } + + module.exports = hashHas; + + +/***/ }), +/* 131 */ +/***/ (function(module, exports, __webpack_require__) { + + var nativeCreate = __webpack_require__(121); + + /** Used to stand-in for `undefined` hash values. */ + var HASH_UNDEFINED = '__lodash_hash_undefined__'; + + /** + * Sets the hash `key` to `value`. + * + * @private + * @name set + * @memberOf Hash + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the hash instance. + */ + function hashSet(key, value) { + var data = this.__data__; + this.size += this.has(key) ? 0 : 1; + data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value; + return this; + } + + module.exports = hashSet; + + +/***/ }), +/* 132 */ +/***/ (function(module, exports, __webpack_require__) { + + var listCacheClear = __webpack_require__(133), + listCacheDelete = __webpack_require__(134), + listCacheGet = __webpack_require__(136), + listCacheHas = __webpack_require__(137), + listCacheSet = __webpack_require__(138); + + /** + * Creates an list cache object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ + function ListCache(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } + } + + // Add methods to `ListCache`. + ListCache.prototype.clear = listCacheClear; + ListCache.prototype['delete'] = listCacheDelete; + ListCache.prototype.get = listCacheGet; + ListCache.prototype.has = listCacheHas; + ListCache.prototype.set = listCacheSet; + + module.exports = ListCache; + + +/***/ }), +/* 133 */ +/***/ (function(module, exports) { + + /** + * Removes all key-value entries from the list cache. + * + * @private + * @name clear + * @memberOf ListCache + */ + function listCacheClear() { + this.__data__ = []; + this.size = 0; + } + + module.exports = listCacheClear; + + +/***/ }), +/* 134 */ +/***/ (function(module, exports, __webpack_require__) { + + var assocIndexOf = __webpack_require__(135); + + /** Used for built-in method references. */ + var arrayProto = Array.prototype; + + /** Built-in value references. */ + var splice = arrayProto.splice; + + /** + * Removes `key` and its value from the list cache. + * + * @private + * @name delete + * @memberOf ListCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function listCacheDelete(key) { + var data = this.__data__, + index = assocIndexOf(data, key); + + if (index < 0) { + return false; + } + var lastIndex = data.length - 1; + if (index == lastIndex) { + data.pop(); + } else { + splice.call(data, index, 1); + } + --this.size; + return true; + } + + module.exports = listCacheDelete; + + +/***/ }), +/* 135 */ +/***/ (function(module, exports, __webpack_require__) { + + var eq = __webpack_require__(88); + + /** + * Gets the index at which the `key` is found in `array` of key-value pairs. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} key The key to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function assocIndexOf(array, key) { + var length = array.length; + while (length--) { + if (eq(array[length][0], key)) { + return length; + } + } + return -1; + } + + module.exports = assocIndexOf; + + +/***/ }), +/* 136 */ +/***/ (function(module, exports, __webpack_require__) { + + var assocIndexOf = __webpack_require__(135); + + /** + * Gets the list cache value for `key`. + * + * @private + * @name get + * @memberOf ListCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function listCacheGet(key) { + var data = this.__data__, + index = assocIndexOf(data, key); + + return index < 0 ? undefined : data[index][1]; + } + + module.exports = listCacheGet; + + +/***/ }), +/* 137 */ +/***/ (function(module, exports, __webpack_require__) { + + var assocIndexOf = __webpack_require__(135); + + /** + * Checks if a list cache value for `key` exists. + * + * @private + * @name has + * @memberOf ListCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function listCacheHas(key) { + return assocIndexOf(this.__data__, key) > -1; + } + + module.exports = listCacheHas; + + +/***/ }), +/* 138 */ +/***/ (function(module, exports, __webpack_require__) { + + var assocIndexOf = __webpack_require__(135); + + /** + * Sets the list cache `key` to `value`. + * + * @private + * @name set + * @memberOf ListCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the list cache instance. + */ + function listCacheSet(key, value) { + var data = this.__data__, + index = assocIndexOf(data, key); + + if (index < 0) { + ++this.size; + data.push([key, value]); + } else { + data[index][1] = value; + } + return this; + } + + module.exports = listCacheSet; + + +/***/ }), +/* 139 */ +/***/ (function(module, exports, __webpack_require__) { + + var getNative = __webpack_require__(122), + root = __webpack_require__(93); + + /* Built-in method references that are verified to be native. */ + var Map = getNative(root, 'Map'); + + module.exports = Map; + + +/***/ }), +/* 140 */ +/***/ (function(module, exports, __webpack_require__) { + + var getMapData = __webpack_require__(141); + + /** + * Removes `key` and its value from the map. + * + * @private + * @name delete + * @memberOf MapCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function mapCacheDelete(key) { + var result = getMapData(this, key)['delete'](key); + this.size -= result ? 1 : 0; + return result; + } + + module.exports = mapCacheDelete; + + +/***/ }), +/* 141 */ +/***/ (function(module, exports, __webpack_require__) { + + var isKeyable = __webpack_require__(142); + + /** + * Gets the data for `map`. + * + * @private + * @param {Object} map The map to query. + * @param {string} key The reference key. + * @returns {*} Returns the map data. + */ + function getMapData(map, key) { + var data = map.__data__; + return isKeyable(key) + ? data[typeof key == 'string' ? 'string' : 'hash'] + : data.map; + } + + module.exports = getMapData; + + +/***/ }), +/* 142 */ +/***/ (function(module, exports) { + + /** + * Checks if `value` is suitable for use as unique object key. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is suitable, else `false`. + */ + function isKeyable(value) { + var type = typeof value; + return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') + ? (value !== '__proto__') + : (value === null); + } + + module.exports = isKeyable; + + +/***/ }), +/* 143 */ +/***/ (function(module, exports, __webpack_require__) { + + var getMapData = __webpack_require__(141); + + /** + * Gets the map value for `key`. + * + * @private + * @name get + * @memberOf MapCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function mapCacheGet(key) { + return getMapData(this, key).get(key); + } + + module.exports = mapCacheGet; + + +/***/ }), +/* 144 */ +/***/ (function(module, exports, __webpack_require__) { + + var getMapData = __webpack_require__(141); + + /** + * Checks if a map value for `key` exists. + * + * @private + * @name has + * @memberOf MapCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function mapCacheHas(key) { + return getMapData(this, key).has(key); + } + + module.exports = mapCacheHas; + + +/***/ }), +/* 145 */ +/***/ (function(module, exports, __webpack_require__) { + + var getMapData = __webpack_require__(141); + + /** + * Sets the map `key` to `value`. + * + * @private + * @name set + * @memberOf MapCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the map cache instance. + */ + function mapCacheSet(key, value) { + var data = getMapData(this, key), + size = data.size; + + data.set(key, value); + this.size += data.size == size ? 0 : 1; + return this; + } + + module.exports = mapCacheSet; + + +/***/ }), +/* 146 */ +/***/ (function(module, exports) { + + /** Used to stand-in for `undefined` hash values. */ + var HASH_UNDEFINED = '__lodash_hash_undefined__'; + + /** + * Adds `value` to the array cache. + * + * @private + * @name add + * @memberOf SetCache + * @alias push + * @param {*} value The value to cache. + * @returns {Object} Returns the cache instance. + */ + function setCacheAdd(value) { + this.__data__.set(value, HASH_UNDEFINED); + return this; + } + + module.exports = setCacheAdd; + + +/***/ }), +/* 147 */ +/***/ (function(module, exports) { + + /** + * Checks if `value` is in the array cache. + * + * @private + * @name has + * @memberOf SetCache + * @param {*} value The value to search for. + * @returns {number} Returns `true` if `value` is found, else `false`. + */ + function setCacheHas(value) { + return this.__data__.has(value); + } + + module.exports = setCacheHas; + + +/***/ }), +/* 148 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseIndexOf = __webpack_require__(149); + + /** + * A specialized version of `_.includes` for arrays without support for + * specifying an index to search from. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ + function arrayIncludes(array, value) { + var length = array == null ? 0 : array.length; + return !!length && baseIndexOf(array, value, 0) > -1; + } + + module.exports = arrayIncludes; + + +/***/ }), +/* 149 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseFindIndex = __webpack_require__(150), + baseIsNaN = __webpack_require__(151), + strictIndexOf = __webpack_require__(152); + + /** + * The base implementation of `_.indexOf` without `fromIndex` bounds checks. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function baseIndexOf(array, value, fromIndex) { + return value === value + ? strictIndexOf(array, value, fromIndex) + : baseFindIndex(array, baseIsNaN, fromIndex); + } + + module.exports = baseIndexOf; + + +/***/ }), +/* 150 */ +/***/ (function(module, exports) { + + /** + * The base implementation of `_.findIndex` and `_.findLastIndex` without + * support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} predicate The function invoked per iteration. + * @param {number} fromIndex The index to search from. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function baseFindIndex(array, predicate, fromIndex, fromRight) { + var length = array.length, + index = fromIndex + (fromRight ? 1 : -1); + + while ((fromRight ? index-- : ++index < length)) { + if (predicate(array[index], index, array)) { + return index; + } + } + return -1; + } + + module.exports = baseFindIndex; + + +/***/ }), +/* 151 */ +/***/ (function(module, exports) { + + /** + * The base implementation of `_.isNaN` without support for number objects. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. + */ + function baseIsNaN(value) { + return value !== value; + } + + module.exports = baseIsNaN; + + +/***/ }), +/* 152 */ +/***/ (function(module, exports) { + + /** + * A specialized version of `_.indexOf` which performs strict equality + * comparisons of values, i.e. `===`. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function strictIndexOf(array, value, fromIndex) { + var index = fromIndex - 1, + length = array.length; + + while (++index < length) { + if (array[index] === value) { + return index; + } + } + return -1; + } + + module.exports = strictIndexOf; + + +/***/ }), +/* 153 */ +/***/ (function(module, exports) { + + /** + * This function is like `arrayIncludes` except that it accepts a comparator. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @param {Function} comparator The comparator invoked per element. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ + function arrayIncludesWith(array, value, comparator) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (comparator(value, array[index])) { + return true; + } + } + return false; + } + + module.exports = arrayIncludesWith; + + +/***/ }), +/* 154 */ +/***/ (function(module, exports) { + + /** + * A specialized version of `_.map` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ + function arrayMap(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length, + result = Array(length); + + while (++index < length) { + result[index] = iteratee(array[index], index, array); + } + return result; + } + + module.exports = arrayMap; + + +/***/ }), +/* 155 */ +/***/ (function(module, exports) { + + /** + * The base implementation of `_.unary` without support for storing metadata. + * + * @private + * @param {Function} func The function to cap arguments for. + * @returns {Function} Returns the new capped function. + */ + function baseUnary(func) { + return function(value) { + return func(value); + }; + } + + module.exports = baseUnary; + + +/***/ }), +/* 156 */ +/***/ (function(module, exports) { + + /** + * Checks if a `cache` value for `key` exists. + * + * @private + * @param {Object} cache The cache to query. + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function cacheHas(cache, key) { + return cache.has(key); + } + + module.exports = cacheHas; + + +/***/ }), +/* 157 */ +/***/ (function(module, exports, __webpack_require__) { + + var identity = __webpack_require__(158), + overRest = __webpack_require__(159), + setToString = __webpack_require__(161); + + /** + * The base implementation of `_.rest` which doesn't validate or coerce arguments. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @returns {Function} Returns the new function. + */ + function baseRest(func, start) { + return setToString(overRest(func, start, identity), func + ''); + } + + module.exports = baseRest; + + +/***/ }), +/* 158 */ +/***/ (function(module, exports) { + + /** + * This method returns the first argument it receives. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {*} value Any value. + * @returns {*} Returns `value`. + * @example + * + * var object = { 'a': 1 }; + * + * console.log(_.identity(object) === object); + * // => true + */ + function identity(value) { + return value; + } + + module.exports = identity; + + +/***/ }), +/* 159 */ +/***/ (function(module, exports, __webpack_require__) { + + var apply = __webpack_require__(160); + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeMax = Math.max; + + /** + * A specialized version of `baseRest` which transforms the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @param {Function} transform The rest array transform. + * @returns {Function} Returns the new function. + */ + function overRest(func, start, transform) { + start = nativeMax(start === undefined ? (func.length - 1) : start, 0); + return function() { + var args = arguments, + index = -1, + length = nativeMax(args.length - start, 0), + array = Array(length); + + while (++index < length) { + array[index] = args[start + index]; + } + index = -1; + var otherArgs = Array(start + 1); + while (++index < start) { + otherArgs[index] = args[index]; + } + otherArgs[start] = transform(array); + return apply(func, this, otherArgs); + }; + } + + module.exports = overRest; + + +/***/ }), +/* 160 */ +/***/ (function(module, exports) { + + /** + * A faster alternative to `Function#apply`, this function invokes `func` + * with the `this` binding of `thisArg` and the arguments of `args`. + * + * @private + * @param {Function} func The function to invoke. + * @param {*} thisArg The `this` binding of `func`. + * @param {Array} args The arguments to invoke `func` with. + * @returns {*} Returns the result of `func`. + */ + function apply(func, thisArg, args) { + switch (args.length) { + case 0: return func.call(thisArg); + case 1: return func.call(thisArg, args[0]); + case 2: return func.call(thisArg, args[0], args[1]); + case 3: return func.call(thisArg, args[0], args[1], args[2]); + } + return func.apply(thisArg, args); + } + + module.exports = apply; + + +/***/ }), +/* 161 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseSetToString = __webpack_require__(162), + shortOut = __webpack_require__(165); + + /** + * Sets the `toString` method of `func` to return `string`. + * + * @private + * @param {Function} func The function to modify. + * @param {Function} string The `toString` result. + * @returns {Function} Returns `func`. + */ + var setToString = shortOut(baseSetToString); + + module.exports = setToString; + + +/***/ }), +/* 162 */ +/***/ (function(module, exports, __webpack_require__) { + + var constant = __webpack_require__(163), + defineProperty = __webpack_require__(164), + identity = __webpack_require__(158); + + /** + * The base implementation of `setToString` without support for hot loop shorting. + * + * @private + * @param {Function} func The function to modify. + * @param {Function} string The `toString` result. + * @returns {Function} Returns `func`. + */ + var baseSetToString = !defineProperty ? identity : function(func, string) { + return defineProperty(func, 'toString', { + 'configurable': true, + 'enumerable': false, + 'value': constant(string), + 'writable': true + }); + }; + + module.exports = baseSetToString; + + +/***/ }), +/* 163 */ +/***/ (function(module, exports) { + + /** + * Creates a function that returns `value`. + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Util + * @param {*} value The value to return from the new function. + * @returns {Function} Returns the new constant function. + * @example + * + * var objects = _.times(2, _.constant({ 'a': 1 })); + * + * console.log(objects); + * // => [{ 'a': 1 }, { 'a': 1 }] + * + * console.log(objects[0] === objects[1]); + * // => true + */ + function constant(value) { + return function() { + return value; + }; + } + + module.exports = constant; + + +/***/ }), +/* 164 */ +/***/ (function(module, exports, __webpack_require__) { + + var getNative = __webpack_require__(122); + + var defineProperty = (function() { + try { + var func = getNative(Object, 'defineProperty'); + func({}, '', {}); + return func; + } catch (e) {} + }()); + + module.exports = defineProperty; + + +/***/ }), +/* 165 */ +/***/ (function(module, exports) { + + /** Used to detect hot functions by number of calls within a span of milliseconds. */ + var HOT_COUNT = 800, + HOT_SPAN = 16; + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeNow = Date.now; + + /** + * Creates a function that'll short out and invoke `identity` instead + * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN` + * milliseconds. + * + * @private + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new shortable function. + */ + function shortOut(func) { + var count = 0, + lastCalled = 0; + + return function() { + var stamp = nativeNow(), + remaining = HOT_SPAN - (stamp - lastCalled); + + lastCalled = stamp; + if (remaining > 0) { + if (++count >= HOT_COUNT) { + return arguments[0]; + } + } else { + count = 0; + } + return func.apply(undefined, arguments); + }; + } + + module.exports = shortOut; + + +/***/ }), +/* 166 */ +/***/ (function(module, exports, __webpack_require__) { + + var isArrayLike = __webpack_require__(89), + isObjectLike = __webpack_require__(104); + + /** + * This method is like `_.isArrayLike` except that it also checks if `value` + * is an object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array-like object, + * else `false`. + * @example + * + * _.isArrayLikeObject([1, 2, 3]); + * // => true + * + * _.isArrayLikeObject(document.body.children); + * // => true + * + * _.isArrayLikeObject('abc'); + * // => false + * + * _.isArrayLikeObject(_.noop); + * // => false + */ + function isArrayLikeObject(value) { + return isObjectLike(value) && isArrayLike(value); + } + + module.exports = isArrayLikeObject; + + +/***/ }), +/* 167 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseDifference = __webpack_require__(115), + baseFlatten = __webpack_require__(108), + baseIteratee = __webpack_require__(168), + baseRest = __webpack_require__(157), + isArrayLikeObject = __webpack_require__(166), + last = __webpack_require__(228); + + /** + * This method is like `_.difference` except that it accepts `iteratee` which + * is invoked for each element of `array` and `values` to generate the criterion + * by which they're compared. The order and references of result values are + * determined by the first array. The iteratee is invoked with one argument: + * (value). + * + * **Note:** Unlike `_.pullAllBy`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {...Array} [values] The values to exclude. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor); + * // => [1.2] + * + * // The `_.property` iteratee shorthand. + * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x'); + * // => [{ 'x': 2 }] + */ + var differenceBy = baseRest(function(array, values) { + var iteratee = last(values); + if (isArrayLikeObject(iteratee)) { + iteratee = undefined; + } + return isArrayLikeObject(array) + ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), baseIteratee(iteratee, 2)) + : []; + }); + + module.exports = differenceBy; + + +/***/ }), +/* 168 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseMatches = __webpack_require__(169), + baseMatchesProperty = __webpack_require__(211), + identity = __webpack_require__(158), + isArray = __webpack_require__(112), + property = __webpack_require__(225); + + /** + * The base implementation of `_.iteratee`. + * + * @private + * @param {*} [value=_.identity] The value to convert to an iteratee. + * @returns {Function} Returns the iteratee. + */ + function baseIteratee(value) { + // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. + // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. + if (typeof value == 'function') { + return value; + } + if (value == null) { + return identity; + } + if (typeof value == 'object') { + return isArray(value) + ? baseMatchesProperty(value[0], value[1]) + : baseMatches(value); + } + return property(value); + } + + module.exports = baseIteratee; + + +/***/ }), +/* 169 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseIsMatch = __webpack_require__(170), + getMatchData = __webpack_require__(208), + matchesStrictComparable = __webpack_require__(210); + + /** + * The base implementation of `_.matches` which doesn't clone `source`. + * + * @private + * @param {Object} source The object of property values to match. + * @returns {Function} Returns the new spec function. + */ + function baseMatches(source) { + var matchData = getMatchData(source); + if (matchData.length == 1 && matchData[0][2]) { + return matchesStrictComparable(matchData[0][0], matchData[0][1]); + } + return function(object) { + return object === source || baseIsMatch(object, source, matchData); + }; + } + + module.exports = baseMatches; + + +/***/ }), +/* 170 */ +/***/ (function(module, exports, __webpack_require__) { + + var Stack = __webpack_require__(171), + baseIsEqual = __webpack_require__(177); + + /** Used to compose bitmasks for value comparisons. */ + var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; + + /** + * The base implementation of `_.isMatch` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @param {Array} matchData The property names, values, and compare flags to match. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + */ + function baseIsMatch(object, source, matchData, customizer) { + var index = matchData.length, + length = index, + noCustomizer = !customizer; + + if (object == null) { + return !length; + } + object = Object(object); + while (index--) { + var data = matchData[index]; + if ((noCustomizer && data[2]) + ? data[1] !== object[data[0]] + : !(data[0] in object) + ) { + return false; + } + } + while (++index < length) { + data = matchData[index]; + var key = data[0], + objValue = object[key], + srcValue = data[1]; + + if (noCustomizer && data[2]) { + if (objValue === undefined && !(key in object)) { + return false; + } + } else { + var stack = new Stack; + if (customizer) { + var result = customizer(objValue, srcValue, key, object, source, stack); + } + if (!(result === undefined + ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack) + : result + )) { + return false; + } + } + } + return true; + } + + module.exports = baseIsMatch; + + +/***/ }), +/* 171 */ +/***/ (function(module, exports, __webpack_require__) { + + var ListCache = __webpack_require__(132), + stackClear = __webpack_require__(172), + stackDelete = __webpack_require__(173), + stackGet = __webpack_require__(174), + stackHas = __webpack_require__(175), + stackSet = __webpack_require__(176); + + /** + * Creates a stack cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ + function Stack(entries) { + var data = this.__data__ = new ListCache(entries); + this.size = data.size; + } + + // Add methods to `Stack`. + Stack.prototype.clear = stackClear; + Stack.prototype['delete'] = stackDelete; + Stack.prototype.get = stackGet; + Stack.prototype.has = stackHas; + Stack.prototype.set = stackSet; + + module.exports = Stack; + + +/***/ }), +/* 172 */ +/***/ (function(module, exports, __webpack_require__) { + + var ListCache = __webpack_require__(132); + + /** + * Removes all key-value entries from the stack. + * + * @private + * @name clear + * @memberOf Stack + */ + function stackClear() { + this.__data__ = new ListCache; + this.size = 0; + } + + module.exports = stackClear; + + +/***/ }), +/* 173 */ +/***/ (function(module, exports) { + + /** + * Removes `key` and its value from the stack. + * + * @private + * @name delete + * @memberOf Stack + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function stackDelete(key) { + var data = this.__data__, + result = data['delete'](key); + + this.size = data.size; + return result; + } + + module.exports = stackDelete; + + +/***/ }), +/* 174 */ +/***/ (function(module, exports) { + + /** + * Gets the stack value for `key`. + * + * @private + * @name get + * @memberOf Stack + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function stackGet(key) { + return this.__data__.get(key); + } + + module.exports = stackGet; + + +/***/ }), +/* 175 */ +/***/ (function(module, exports) { + + /** + * Checks if a stack value for `key` exists. + * + * @private + * @name has + * @memberOf Stack + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function stackHas(key) { + return this.__data__.has(key); + } + + module.exports = stackHas; + + +/***/ }), +/* 176 */ +/***/ (function(module, exports, __webpack_require__) { + + var ListCache = __webpack_require__(132), + Map = __webpack_require__(139), + MapCache = __webpack_require__(117); + + /** Used as the size to enable large array optimizations. */ + var LARGE_ARRAY_SIZE = 200; + + /** + * Sets the stack `key` to `value`. + * + * @private + * @name set + * @memberOf Stack + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the stack cache instance. + */ + function stackSet(key, value) { + var data = this.__data__; + if (data instanceof ListCache) { + var pairs = data.__data__; + if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) { + pairs.push([key, value]); + this.size = ++data.size; + return this; + } + data = this.__data__ = new MapCache(pairs); + } + data.set(key, value); + this.size = data.size; + return this; + } + + module.exports = stackSet; + + +/***/ }), +/* 177 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseIsEqualDeep = __webpack_require__(178), + isObjectLike = __webpack_require__(104); + + /** + * The base implementation of `_.isEqual` which supports partial comparisons + * and tracks traversed objects. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {boolean} bitmask The bitmask flags. + * 1 - Unordered comparison + * 2 - Partial comparison + * @param {Function} [customizer] The function to customize comparisons. + * @param {Object} [stack] Tracks traversed `value` and `other` objects. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + */ + function baseIsEqual(value, other, bitmask, customizer, stack) { + if (value === other) { + return true; + } + if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) { + return value !== value && other !== other; + } + return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); + } + + module.exports = baseIsEqual; + + +/***/ }), +/* 178 */ +/***/ (function(module, exports, __webpack_require__) { + + var Stack = __webpack_require__(171), + equalArrays = __webpack_require__(179), + equalByTag = __webpack_require__(181), + equalObjects = __webpack_require__(185), + getTag = __webpack_require__(203), + isArray = __webpack_require__(112), + isBuffer = __webpack_require__(194), + isTypedArray = __webpack_require__(196); + + /** Used to compose bitmasks for value comparisons. */ + var COMPARE_PARTIAL_FLAG = 1; + + /** `Object#toString` result references. */ + var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + objectTag = '[object Object]'; + + /** Used for built-in method references. */ + var objectProto = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty = objectProto.hasOwnProperty; + + /** + * A specialized version of `baseIsEqual` for arrays and objects which performs + * deep comparisons and tracks traversed objects enabling objects with circular + * references to be compared. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} [stack] Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { + var objIsArr = isArray(object), + othIsArr = isArray(other), + objTag = objIsArr ? arrayTag : getTag(object), + othTag = othIsArr ? arrayTag : getTag(other); + + objTag = objTag == argsTag ? objectTag : objTag; + othTag = othTag == argsTag ? objectTag : othTag; + + var objIsObj = objTag == objectTag, + othIsObj = othTag == objectTag, + isSameTag = objTag == othTag; + + if (isSameTag && isBuffer(object)) { + if (!isBuffer(other)) { + return false; + } + objIsArr = true; + objIsObj = false; + } + if (isSameTag && !objIsObj) { + stack || (stack = new Stack); + return (objIsArr || isTypedArray(object)) + ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) + : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); + } + if (!(bitmask & COMPARE_PARTIAL_FLAG)) { + var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'), + othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__'); + + if (objIsWrapped || othIsWrapped) { + var objUnwrapped = objIsWrapped ? object.value() : object, + othUnwrapped = othIsWrapped ? other.value() : other; + + stack || (stack = new Stack); + return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); + } + } + if (!isSameTag) { + return false; + } + stack || (stack = new Stack); + return equalObjects(object, other, bitmask, customizer, equalFunc, stack); + } + + module.exports = baseIsEqualDeep; + + +/***/ }), +/* 179 */ +/***/ (function(module, exports, __webpack_require__) { + + var SetCache = __webpack_require__(116), + arraySome = __webpack_require__(180), + cacheHas = __webpack_require__(156); + + /** Used to compose bitmasks for value comparisons. */ + var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; + + /** + * A specialized version of `baseIsEqualDeep` for arrays with support for + * partial deep comparisons. + * + * @private + * @param {Array} array The array to compare. + * @param {Array} other The other array to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `array` and `other` objects. + * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. + */ + function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, + arrLength = array.length, + othLength = other.length; + + if (arrLength != othLength && !(isPartial && othLength > arrLength)) { + return false; + } + // Assume cyclic values are equal. + var stacked = stack.get(array); + if (stacked && stack.get(other)) { + return stacked == other; + } + var index = -1, + result = true, + seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined; + + stack.set(array, other); + stack.set(other, array); + + // Ignore non-index properties. + while (++index < arrLength) { + var arrValue = array[index], + othValue = other[index]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, arrValue, index, other, array, stack) + : customizer(arrValue, othValue, index, array, other, stack); + } + if (compared !== undefined) { + if (compared) { + continue; + } + result = false; + break; + } + // Recursively compare arrays (susceptible to call stack limits). + if (seen) { + if (!arraySome(other, function(othValue, othIndex) { + if (!cacheHas(seen, othIndex) && + (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { + return seen.push(othIndex); + } + })) { + result = false; + break; + } + } else if (!( + arrValue === othValue || + equalFunc(arrValue, othValue, bitmask, customizer, stack) + )) { + result = false; + break; + } + } + stack['delete'](array); + stack['delete'](other); + return result; + } + + module.exports = equalArrays; + + +/***/ }), +/* 180 */ +/***/ (function(module, exports) { + + /** + * A specialized version of `_.some` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ + function arraySome(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (predicate(array[index], index, array)) { + return true; + } + } + return false; + } + + module.exports = arraySome; + + +/***/ }), +/* 181 */ +/***/ (function(module, exports, __webpack_require__) { + + var Symbol = __webpack_require__(92), + Uint8Array = __webpack_require__(182), + eq = __webpack_require__(88), + equalArrays = __webpack_require__(179), + mapToArray = __webpack_require__(183), + setToArray = __webpack_require__(184); + + /** Used to compose bitmasks for value comparisons. */ + var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; + + /** `Object#toString` result references. */ + var boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + mapTag = '[object Map]', + numberTag = '[object Number]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]'; + + var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]'; + + /** Used to convert symbols to primitives and strings. */ + var symbolProto = Symbol ? Symbol.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; + + /** + * A specialized version of `baseIsEqualDeep` for comparing objects of + * the same `toStringTag`. + * + * **Note:** This function only supports comparing values with tags of + * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {string} tag The `toStringTag` of the objects to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { + switch (tag) { + case dataViewTag: + if ((object.byteLength != other.byteLength) || + (object.byteOffset != other.byteOffset)) { + return false; + } + object = object.buffer; + other = other.buffer; + + case arrayBufferTag: + if ((object.byteLength != other.byteLength) || + !equalFunc(new Uint8Array(object), new Uint8Array(other))) { + return false; + } + return true; + + case boolTag: + case dateTag: + case numberTag: + // Coerce booleans to `1` or `0` and dates to milliseconds. + // Invalid dates are coerced to `NaN`. + return eq(+object, +other); + + case errorTag: + return object.name == other.name && object.message == other.message; + + case regexpTag: + case stringTag: + // Coerce regexes to strings and treat strings, primitives and objects, + // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring + // for more details. + return object == (other + ''); + + case mapTag: + var convert = mapToArray; + + case setTag: + var isPartial = bitmask & COMPARE_PARTIAL_FLAG; + convert || (convert = setToArray); + + if (object.size != other.size && !isPartial) { + return false; + } + // Assume cyclic values are equal. + var stacked = stack.get(object); + if (stacked) { + return stacked == other; + } + bitmask |= COMPARE_UNORDERED_FLAG; + + // Recursively compare objects (susceptible to call stack limits). + stack.set(object, other); + var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); + stack['delete'](object); + return result; + + case symbolTag: + if (symbolValueOf) { + return symbolValueOf.call(object) == symbolValueOf.call(other); + } + } + return false; + } + + module.exports = equalByTag; + + +/***/ }), +/* 182 */ +/***/ (function(module, exports, __webpack_require__) { + + var root = __webpack_require__(93); + + /** Built-in value references. */ + var Uint8Array = root.Uint8Array; + + module.exports = Uint8Array; + + +/***/ }), +/* 183 */ +/***/ (function(module, exports) { + + /** + * Converts `map` to its key-value pairs. + * + * @private + * @param {Object} map The map to convert. + * @returns {Array} Returns the key-value pairs. + */ + function mapToArray(map) { + var index = -1, + result = Array(map.size); + + map.forEach(function(value, key) { + result[++index] = [key, value]; + }); + return result; + } + + module.exports = mapToArray; + + +/***/ }), +/* 184 */ +/***/ (function(module, exports) { + + /** + * Converts `set` to an array of its values. + * + * @private + * @param {Object} set The set to convert. + * @returns {Array} Returns the values. + */ + function setToArray(set) { + var index = -1, + result = Array(set.size); + + set.forEach(function(value) { + result[++index] = value; + }); + return result; + } + + module.exports = setToArray; + + +/***/ }), +/* 185 */ +/***/ (function(module, exports, __webpack_require__) { + + var getAllKeys = __webpack_require__(186); + + /** Used to compose bitmasks for value comparisons. */ + var COMPARE_PARTIAL_FLAG = 1; + + /** Used for built-in method references. */ + var objectProto = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty = objectProto.hasOwnProperty; + + /** + * A specialized version of `baseIsEqualDeep` for objects with support for + * partial deep comparisons. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, + objProps = getAllKeys(object), + objLength = objProps.length, + othProps = getAllKeys(other), + othLength = othProps.length; + + if (objLength != othLength && !isPartial) { + return false; + } + var index = objLength; + while (index--) { + var key = objProps[index]; + if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) { + return false; + } + } + // Assume cyclic values are equal. + var stacked = stack.get(object); + if (stacked && stack.get(other)) { + return stacked == other; + } + var result = true; + stack.set(object, other); + stack.set(other, object); + + var skipCtor = isPartial; + while (++index < objLength) { + key = objProps[index]; + var objValue = object[key], + othValue = other[key]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, objValue, key, other, object, stack) + : customizer(objValue, othValue, key, object, other, stack); + } + // Recursively compare objects (susceptible to call stack limits). + if (!(compared === undefined + ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) + : compared + )) { + result = false; + break; + } + skipCtor || (skipCtor = key == 'constructor'); + } + if (result && !skipCtor) { + var objCtor = object.constructor, + othCtor = other.constructor; + + // Non `Object` object instances with different constructors are not equal. + if (objCtor != othCtor && + ('constructor' in object && 'constructor' in other) && + !(typeof objCtor == 'function' && objCtor instanceof objCtor && + typeof othCtor == 'function' && othCtor instanceof othCtor)) { + result = false; + } + } + stack['delete'](object); + stack['delete'](other); + return result; + } + + module.exports = equalObjects; + + +/***/ }), +/* 186 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseGetAllKeys = __webpack_require__(187), + getSymbols = __webpack_require__(188), + keys = __webpack_require__(191); + + /** + * Creates an array of own enumerable property names and symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ + function getAllKeys(object) { + return baseGetAllKeys(object, keys, getSymbols); + } + + module.exports = getAllKeys; + + +/***/ }), +/* 187 */ +/***/ (function(module, exports, __webpack_require__) { + + var arrayPush = __webpack_require__(107), + isArray = __webpack_require__(112); + + /** + * The base implementation of `getAllKeys` and `getAllKeysIn` which uses + * `keysFunc` and `symbolsFunc` to get the enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Function} keysFunc The function to get the keys of `object`. + * @param {Function} symbolsFunc The function to get the symbols of `object`. + * @returns {Array} Returns the array of property names and symbols. + */ + function baseGetAllKeys(object, keysFunc, symbolsFunc) { + var result = keysFunc(object); + return isArray(object) ? result : arrayPush(result, symbolsFunc(object)); + } + + module.exports = baseGetAllKeys; + + +/***/ }), +/* 188 */ +/***/ (function(module, exports, __webpack_require__) { + + var arrayFilter = __webpack_require__(189), + stubArray = __webpack_require__(190); + + /** Used for built-in method references. */ + var objectProto = Object.prototype; + + /** Built-in value references. */ + var propertyIsEnumerable = objectProto.propertyIsEnumerable; + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeGetSymbols = Object.getOwnPropertySymbols; + + /** + * Creates an array of the own enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ + var getSymbols = !nativeGetSymbols ? stubArray : function(object) { + if (object == null) { + return []; + } + object = Object(object); + return arrayFilter(nativeGetSymbols(object), function(symbol) { + return propertyIsEnumerable.call(object, symbol); + }); + }; + + module.exports = getSymbols; + + +/***/ }), +/* 189 */ +/***/ (function(module, exports) { + + /** + * A specialized version of `_.filter` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ + function arrayFilter(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result[resIndex++] = value; + } + } + return result; + } + + module.exports = arrayFilter; + + +/***/ }), +/* 190 */ +/***/ (function(module, exports) { + + /** + * This method returns a new empty array. + * + * @static + * @memberOf _ + * @since 4.13.0 + * @category Util + * @returns {Array} Returns the new empty array. + * @example + * + * var arrays = _.times(2, _.stubArray); + * + * console.log(arrays); + * // => [[], []] + * + * console.log(arrays[0] === arrays[1]); + * // => false + */ + function stubArray() { + return []; + } + + module.exports = stubArray; + + +/***/ }), +/* 191 */ +/***/ (function(module, exports, __webpack_require__) { + + var arrayLikeKeys = __webpack_require__(192), + baseKeys = __webpack_require__(199), + isArrayLike = __webpack_require__(89); + + /** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * for more details. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ + function keys(object) { + return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); + } + + module.exports = keys; + + +/***/ }), +/* 192 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseTimes = __webpack_require__(193), + isArguments = __webpack_require__(110), + isArray = __webpack_require__(112), + isBuffer = __webpack_require__(194), + isIndex = __webpack_require__(99), + isTypedArray = __webpack_require__(196); + + /** Used for built-in method references. */ + var objectProto = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty = objectProto.hasOwnProperty; + + /** + * Creates an array of the enumerable property names of the array-like `value`. + * + * @private + * @param {*} value The value to query. + * @param {boolean} inherited Specify returning inherited property names. + * @returns {Array} Returns the array of property names. + */ + function arrayLikeKeys(value, inherited) { + var isArr = isArray(value), + isArg = !isArr && isArguments(value), + isBuff = !isArr && !isArg && isBuffer(value), + isType = !isArr && !isArg && !isBuff && isTypedArray(value), + skipIndexes = isArr || isArg || isBuff || isType, + result = skipIndexes ? baseTimes(value.length, String) : [], + length = result.length; + + for (var key in value) { + if ((inherited || hasOwnProperty.call(value, key)) && + !(skipIndexes && ( + // Safari 9 has enumerable `arguments.length` in strict mode. + key == 'length' || + // Node.js 0.10 has enumerable non-index properties on buffers. + (isBuff && (key == 'offset' || key == 'parent')) || + // PhantomJS 2 has enumerable non-index properties on typed arrays. + (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || + // Skip index properties. + isIndex(key, length) + ))) { + result.push(key); + } + } + return result; + } + + module.exports = arrayLikeKeys; + + +/***/ }), +/* 193 */ +/***/ (function(module, exports) { + + /** + * The base implementation of `_.times` without support for iteratee shorthands + * or max array length checks. + * + * @private + * @param {number} n The number of times to invoke `iteratee`. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the array of results. + */ + function baseTimes(n, iteratee) { + var index = -1, + result = Array(n); + + while (++index < n) { + result[index] = iteratee(index); + } + return result; + } + + module.exports = baseTimes; + + +/***/ }), +/* 194 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(module) {var root = __webpack_require__(93), + stubFalse = __webpack_require__(195); + + /** Detect free variable `exports`. */ + var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; + + /** Detect free variable `module`. */ + var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; + + /** Detect the popular CommonJS extension `module.exports`. */ + var moduleExports = freeModule && freeModule.exports === freeExports; + + /** Built-in value references. */ + var Buffer = moduleExports ? root.Buffer : undefined; + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined; + + /** + * Checks if `value` is a buffer. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. + * @example + * + * _.isBuffer(new Buffer(2)); + * // => true + * + * _.isBuffer(new Uint8Array(2)); + * // => false + */ + var isBuffer = nativeIsBuffer || stubFalse; + + module.exports = isBuffer; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(59)(module))) + +/***/ }), +/* 195 */ +/***/ (function(module, exports) { + + /** + * This method returns `false`. + * + * @static + * @memberOf _ + * @since 4.13.0 + * @category Util + * @returns {boolean} Returns `false`. + * @example + * + * _.times(2, _.stubFalse); + * // => [false, false] + */ + function stubFalse() { + return false; + } + + module.exports = stubFalse; + + +/***/ }), +/* 196 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseIsTypedArray = __webpack_require__(197), + baseUnary = __webpack_require__(155), + nodeUtil = __webpack_require__(198); + + /* Node.js helper references. */ + var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; + + /** + * Checks if `value` is classified as a typed array. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + * @example + * + * _.isTypedArray(new Uint8Array); + * // => true + * + * _.isTypedArray([]); + * // => false + */ + var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; + + module.exports = isTypedArray; + + +/***/ }), +/* 197 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseGetTag = __webpack_require__(91), + isLength = __webpack_require__(98), + isObjectLike = __webpack_require__(104); + + /** `Object#toString` result references. */ + var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + funcTag = '[object Function]', + mapTag = '[object Map]', + numberTag = '[object Number]', + objectTag = '[object Object]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + weakMapTag = '[object WeakMap]'; + + var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + + /** Used to identify `toStringTag` values of typed arrays. */ + var typedArrayTags = {}; + typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = + typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = + typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = + typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = + typedArrayTags[uint32Tag] = true; + typedArrayTags[argsTag] = typedArrayTags[arrayTag] = + typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = + typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = + typedArrayTags[errorTag] = typedArrayTags[funcTag] = + typedArrayTags[mapTag] = typedArrayTags[numberTag] = + typedArrayTags[objectTag] = typedArrayTags[regexpTag] = + typedArrayTags[setTag] = typedArrayTags[stringTag] = + typedArrayTags[weakMapTag] = false; + + /** + * The base implementation of `_.isTypedArray` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + */ + function baseIsTypedArray(value) { + return isObjectLike(value) && + isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; + } + + module.exports = baseIsTypedArray; + + +/***/ }), +/* 198 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(module) {var freeGlobal = __webpack_require__(94); + + /** Detect free variable `exports`. */ + var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; + + /** Detect free variable `module`. */ + var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; + + /** Detect the popular CommonJS extension `module.exports`. */ + var moduleExports = freeModule && freeModule.exports === freeExports; + + /** Detect free variable `process` from Node.js. */ + var freeProcess = moduleExports && freeGlobal.process; + + /** Used to access faster Node.js helpers. */ + var nodeUtil = (function() { + try { + // Use `util.types` for Node.js 10+. + var types = freeModule && freeModule.require && freeModule.require('util').types; + + if (types) { + return types; + } + + // Legacy `process.binding('util')` for Node.js < 10. + return freeProcess && freeProcess.binding && freeProcess.binding('util'); + } catch (e) {} + }()); + + module.exports = nodeUtil; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(59)(module))) + +/***/ }), +/* 199 */ +/***/ (function(module, exports, __webpack_require__) { + + var isPrototype = __webpack_require__(200), + nativeKeys = __webpack_require__(201); + + /** Used for built-in method references. */ + var objectProto = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty = objectProto.hasOwnProperty; + + /** + * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ + function baseKeys(object) { + if (!isPrototype(object)) { + return nativeKeys(object); + } + var result = []; + for (var key in Object(object)) { + if (hasOwnProperty.call(object, key) && key != 'constructor') { + result.push(key); + } + } + return result; + } + + module.exports = baseKeys; + + +/***/ }), +/* 200 */ +/***/ (function(module, exports) { + + /** Used for built-in method references. */ + var objectProto = Object.prototype; + + /** + * Checks if `value` is likely a prototype object. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. + */ + function isPrototype(value) { + var Ctor = value && value.constructor, + proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto; + + return value === proto; + } + + module.exports = isPrototype; + + +/***/ }), +/* 201 */ +/***/ (function(module, exports, __webpack_require__) { + + var overArg = __webpack_require__(202); + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeKeys = overArg(Object.keys, Object); + + module.exports = nativeKeys; + + +/***/ }), +/* 202 */ +/***/ (function(module, exports) { + + /** + * Creates a unary function that invokes `func` with its argument transformed. + * + * @private + * @param {Function} func The function to wrap. + * @param {Function} transform The argument transform. + * @returns {Function} Returns the new function. + */ + function overArg(func, transform) { + return function(arg) { + return func(transform(arg)); + }; + } + + module.exports = overArg; + + +/***/ }), +/* 203 */ +/***/ (function(module, exports, __webpack_require__) { + + var DataView = __webpack_require__(204), + Map = __webpack_require__(139), + Promise = __webpack_require__(205), + Set = __webpack_require__(206), + WeakMap = __webpack_require__(207), + baseGetTag = __webpack_require__(91), + toSource = __webpack_require__(126); + + /** `Object#toString` result references. */ + var mapTag = '[object Map]', + objectTag = '[object Object]', + promiseTag = '[object Promise]', + setTag = '[object Set]', + weakMapTag = '[object WeakMap]'; + + var dataViewTag = '[object DataView]'; + + /** Used to detect maps, sets, and weakmaps. */ + var dataViewCtorString = toSource(DataView), + mapCtorString = toSource(Map), + promiseCtorString = toSource(Promise), + setCtorString = toSource(Set), + weakMapCtorString = toSource(WeakMap); + + /** + * Gets the `toStringTag` of `value`. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ + var getTag = baseGetTag; + + // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6. + if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) || + (Map && getTag(new Map) != mapTag) || + (Promise && getTag(Promise.resolve()) != promiseTag) || + (Set && getTag(new Set) != setTag) || + (WeakMap && getTag(new WeakMap) != weakMapTag)) { + getTag = function(value) { + var result = baseGetTag(value), + Ctor = result == objectTag ? value.constructor : undefined, + ctorString = Ctor ? toSource(Ctor) : ''; + + if (ctorString) { + switch (ctorString) { + case dataViewCtorString: return dataViewTag; + case mapCtorString: return mapTag; + case promiseCtorString: return promiseTag; + case setCtorString: return setTag; + case weakMapCtorString: return weakMapTag; + } + } + return result; + }; + } + + module.exports = getTag; + + +/***/ }), +/* 204 */ +/***/ (function(module, exports, __webpack_require__) { + + var getNative = __webpack_require__(122), + root = __webpack_require__(93); + + /* Built-in method references that are verified to be native. */ + var DataView = getNative(root, 'DataView'); + + module.exports = DataView; + + +/***/ }), +/* 205 */ +/***/ (function(module, exports, __webpack_require__) { + + var getNative = __webpack_require__(122), + root = __webpack_require__(93); + + /* Built-in method references that are verified to be native. */ + var Promise = getNative(root, 'Promise'); + + module.exports = Promise; + + +/***/ }), +/* 206 */ +/***/ (function(module, exports, __webpack_require__) { + + var getNative = __webpack_require__(122), + root = __webpack_require__(93); + + /* Built-in method references that are verified to be native. */ + var Set = getNative(root, 'Set'); + + module.exports = Set; + + +/***/ }), +/* 207 */ +/***/ (function(module, exports, __webpack_require__) { + + var getNative = __webpack_require__(122), + root = __webpack_require__(93); + + /* Built-in method references that are verified to be native. */ + var WeakMap = getNative(root, 'WeakMap'); + + module.exports = WeakMap; + + +/***/ }), +/* 208 */ +/***/ (function(module, exports, __webpack_require__) { + + var isStrictComparable = __webpack_require__(209), + keys = __webpack_require__(191); + + /** + * Gets the property names, values, and compare flags of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the match data of `object`. + */ + function getMatchData(object) { + var result = keys(object), + length = result.length; + + while (length--) { + var key = result[length], + value = object[key]; + + result[length] = [key, value, isStrictComparable(value)]; + } + return result; + } + + module.exports = getMatchData; + + +/***/ }), +/* 209 */ +/***/ (function(module, exports, __webpack_require__) { + + var isObject = __webpack_require__(97); + + /** + * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` if suitable for strict + * equality comparisons, else `false`. + */ + function isStrictComparable(value) { + return value === value && !isObject(value); + } + + module.exports = isStrictComparable; + + +/***/ }), +/* 210 */ +/***/ (function(module, exports) { + + /** + * A specialized version of `matchesProperty` for source values suitable + * for strict equality comparisons, i.e. `===`. + * + * @private + * @param {string} key The key of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ + function matchesStrictComparable(key, srcValue) { + return function(object) { + if (object == null) { + return false; + } + return object[key] === srcValue && + (srcValue !== undefined || (key in Object(object))); + }; + } + + module.exports = matchesStrictComparable; + + +/***/ }), +/* 211 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseIsEqual = __webpack_require__(177), + get = __webpack_require__(212), + hasIn = __webpack_require__(222), + isKey = __webpack_require__(215), + isStrictComparable = __webpack_require__(209), + matchesStrictComparable = __webpack_require__(210), + toKey = __webpack_require__(221); + + /** Used to compose bitmasks for value comparisons. */ + var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; + + /** + * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. + * + * @private + * @param {string} path The path of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ + function baseMatchesProperty(path, srcValue) { + if (isKey(path) && isStrictComparable(srcValue)) { + return matchesStrictComparable(toKey(path), srcValue); + } + return function(object) { + var objValue = get(object, path); + return (objValue === undefined && objValue === srcValue) + ? hasIn(object, path) + : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG); + }; + } + + module.exports = baseMatchesProperty; + + +/***/ }), +/* 212 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseGet = __webpack_require__(213); + + /** + * Gets the value at `path` of `object`. If the resolved value is + * `undefined`, the `defaultValue` is returned in its place. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.get(object, 'a[0].b.c'); + * // => 3 + * + * _.get(object, ['a', '0', 'b', 'c']); + * // => 3 + * + * _.get(object, 'a.b.c', 'default'); + * // => 'default' + */ + function get(object, path, defaultValue) { + var result = object == null ? undefined : baseGet(object, path); + return result === undefined ? defaultValue : result; + } + + module.exports = get; + + +/***/ }), +/* 213 */ +/***/ (function(module, exports, __webpack_require__) { + + var castPath = __webpack_require__(214), + toKey = __webpack_require__(221); + + /** + * The base implementation of `_.get` without support for default values. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @returns {*} Returns the resolved value. + */ + function baseGet(object, path) { + path = castPath(path, object); + + var index = 0, + length = path.length; + + while (object != null && index < length) { + object = object[toKey(path[index++])]; + } + return (index && index == length) ? object : undefined; + } + + module.exports = baseGet; + + +/***/ }), +/* 214 */ +/***/ (function(module, exports, __webpack_require__) { + + var isArray = __webpack_require__(112), + isKey = __webpack_require__(215), + stringToPath = __webpack_require__(216), + toString = __webpack_require__(219); + + /** + * Casts `value` to a path array if it's not one. + * + * @private + * @param {*} value The value to inspect. + * @param {Object} [object] The object to query keys on. + * @returns {Array} Returns the cast property path array. + */ + function castPath(value, object) { + if (isArray(value)) { + return value; + } + return isKey(value, object) ? [value] : stringToPath(toString(value)); + } + + module.exports = castPath; + + +/***/ }), +/* 215 */ +/***/ (function(module, exports, __webpack_require__) { + + var isArray = __webpack_require__(112), + isSymbol = __webpack_require__(103); + + /** Used to match property names within property paths. */ + var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, + reIsPlainProp = /^\w*$/; + + /** + * Checks if `value` is a property name and not a property path. + * + * @private + * @param {*} value The value to check. + * @param {Object} [object] The object to query keys on. + * @returns {boolean} Returns `true` if `value` is a property name, else `false`. + */ + function isKey(value, object) { + if (isArray(value)) { + return false; + } + var type = typeof value; + if (type == 'number' || type == 'symbol' || type == 'boolean' || + value == null || isSymbol(value)) { + return true; + } + return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || + (object != null && value in Object(object)); + } + + module.exports = isKey; + + +/***/ }), +/* 216 */ +/***/ (function(module, exports, __webpack_require__) { + + var memoizeCapped = __webpack_require__(217); + + /** Used to match property names within property paths. */ + var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; + + /** Used to match backslashes in property paths. */ + var reEscapeChar = /\\(\\)?/g; + + /** + * Converts `string` to a property path array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the property path array. + */ + var stringToPath = memoizeCapped(function(string) { + var result = []; + if (string.charCodeAt(0) === 46 /* . */) { + result.push(''); + } + string.replace(rePropName, function(match, number, quote, subString) { + result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); + }); + return result; + }); + + module.exports = stringToPath; + + +/***/ }), +/* 217 */ +/***/ (function(module, exports, __webpack_require__) { + + var memoize = __webpack_require__(218); + + /** Used as the maximum memoize cache size. */ + var MAX_MEMOIZE_SIZE = 500; + + /** + * A specialized version of `_.memoize` which clears the memoized function's + * cache when it exceeds `MAX_MEMOIZE_SIZE`. + * + * @private + * @param {Function} func The function to have its output memoized. + * @returns {Function} Returns the new memoized function. + */ + function memoizeCapped(func) { + var result = memoize(func, function(key) { + if (cache.size === MAX_MEMOIZE_SIZE) { + cache.clear(); + } + return key; + }); + + var cache = result.cache; + return result; + } + + module.exports = memoizeCapped; + + +/***/ }), +/* 218 */ +/***/ (function(module, exports, __webpack_require__) { + + var MapCache = __webpack_require__(117); + + /** Error message constants. */ + var FUNC_ERROR_TEXT = 'Expected a function'; + + /** + * Creates a function that memoizes the result of `func`. If `resolver` is + * provided, it determines the cache key for storing the result based on the + * arguments provided to the memoized function. By default, the first argument + * provided to the memoized function is used as the map cache key. The `func` + * is invoked with the `this` binding of the memoized function. + * + * **Note:** The cache is exposed as the `cache` property on the memoized + * function. Its creation may be customized by replacing the `_.memoize.Cache` + * constructor with one whose instances implement the + * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object) + * method interface of `clear`, `delete`, `get`, `has`, and `set`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to have its output memoized. + * @param {Function} [resolver] The function to resolve the cache key. + * @returns {Function} Returns the new memoized function. + * @example + * + * var object = { 'a': 1, 'b': 2 }; + * var other = { 'c': 3, 'd': 4 }; + * + * var values = _.memoize(_.values); + * values(object); + * // => [1, 2] + * + * values(other); + * // => [3, 4] + * + * object.a = 2; + * values(object); + * // => [1, 2] + * + * // Modify the result cache. + * values.cache.set(object, ['a', 'b']); + * values(object); + * // => ['a', 'b'] + * + * // Replace `_.memoize.Cache`. + * _.memoize.Cache = WeakMap; + */ + function memoize(func, resolver) { + if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) { + throw new TypeError(FUNC_ERROR_TEXT); + } + var memoized = function() { + var args = arguments, + key = resolver ? resolver.apply(this, args) : args[0], + cache = memoized.cache; + + if (cache.has(key)) { + return cache.get(key); + } + var result = func.apply(this, args); + memoized.cache = cache.set(key, result) || cache; + return result; + }; + memoized.cache = new (memoize.Cache || MapCache); + return memoized; + } + + // Expose `MapCache`. + memoize.Cache = MapCache; + + module.exports = memoize; + + +/***/ }), +/* 219 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseToString = __webpack_require__(220); + + /** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ + function toString(value) { + return value == null ? '' : baseToString(value); + } + + module.exports = toString; + + +/***/ }), +/* 220 */ +/***/ (function(module, exports, __webpack_require__) { + + var Symbol = __webpack_require__(92), + arrayMap = __webpack_require__(154), + isArray = __webpack_require__(112), + isSymbol = __webpack_require__(103); + + /** Used as references for various `Number` constants. */ + var INFINITY = 1 / 0; + + /** Used to convert symbols to primitives and strings. */ + var symbolProto = Symbol ? Symbol.prototype : undefined, + symbolToString = symbolProto ? symbolProto.toString : undefined; + + /** + * The base implementation of `_.toString` which doesn't convert nullish + * values to empty strings. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ + function baseToString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if (isArray(value)) { + // Recursively convert values (susceptible to call stack limits). + return arrayMap(value, baseToString) + ''; + } + if (isSymbol(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; + } + + module.exports = baseToString; + + +/***/ }), +/* 221 */ +/***/ (function(module, exports, __webpack_require__) { + + var isSymbol = __webpack_require__(103); + + /** Used as references for various `Number` constants. */ + var INFINITY = 1 / 0; + + /** + * Converts `value` to a string key if it's not a string or symbol. + * + * @private + * @param {*} value The value to inspect. + * @returns {string|symbol} Returns the key. + */ + function toKey(value) { + if (typeof value == 'string' || isSymbol(value)) { + return value; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; + } + + module.exports = toKey; + + +/***/ }), +/* 222 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseHasIn = __webpack_require__(223), + hasPath = __webpack_require__(224); + + /** + * Checks if `path` is a direct or inherited property of `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.hasIn(object, 'a'); + * // => true + * + * _.hasIn(object, 'a.b'); + * // => true + * + * _.hasIn(object, ['a', 'b']); + * // => true + * + * _.hasIn(object, 'b'); + * // => false + */ + function hasIn(object, path) { + return object != null && hasPath(object, path, baseHasIn); + } + + module.exports = hasIn; + + +/***/ }), +/* 223 */ +/***/ (function(module, exports) { + + /** + * The base implementation of `_.hasIn` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ + function baseHasIn(object, key) { + return object != null && key in Object(object); + } + + module.exports = baseHasIn; + + +/***/ }), +/* 224 */ +/***/ (function(module, exports, __webpack_require__) { + + var castPath = __webpack_require__(214), + isArguments = __webpack_require__(110), + isArray = __webpack_require__(112), + isIndex = __webpack_require__(99), + isLength = __webpack_require__(98), + toKey = __webpack_require__(221); + + /** + * Checks if `path` exists on `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @param {Function} hasFunc The function to check properties. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + */ + function hasPath(object, path, hasFunc) { + path = castPath(path, object); + + var index = -1, + length = path.length, + result = false; + + while (++index < length) { + var key = toKey(path[index]); + if (!(result = object != null && hasFunc(object, key))) { + break; + } + object = object[key]; + } + if (result || ++index != length) { + return result; + } + length = object == null ? 0 : object.length; + return !!length && isLength(length) && isIndex(key, length) && + (isArray(object) || isArguments(object)); + } + + module.exports = hasPath; + + +/***/ }), +/* 225 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseProperty = __webpack_require__(226), + basePropertyDeep = __webpack_require__(227), + isKey = __webpack_require__(215), + toKey = __webpack_require__(221); + + /** + * Creates a function that returns the value at `path` of a given object. + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Util + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + * @example + * + * var objects = [ + * { 'a': { 'b': 2 } }, + * { 'a': { 'b': 1 } } + * ]; + * + * _.map(objects, _.property('a.b')); + * // => [2, 1] + * + * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b'); + * // => [1, 2] + */ + function property(path) { + return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path); + } + + module.exports = property; + + +/***/ }), +/* 226 */ +/***/ (function(module, exports) { + + /** + * The base implementation of `_.property` without support for deep paths. + * + * @private + * @param {string} key The key of the property to get. + * @returns {Function} Returns the new accessor function. + */ + function baseProperty(key) { + return function(object) { + return object == null ? undefined : object[key]; + }; + } + + module.exports = baseProperty; + + +/***/ }), +/* 227 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseGet = __webpack_require__(213); + + /** + * A specialized version of `baseProperty` which supports deep paths. + * + * @private + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + */ + function basePropertyDeep(path) { + return function(object) { + return baseGet(object, path); + }; + } + + module.exports = basePropertyDeep; + + +/***/ }), +/* 228 */ +/***/ (function(module, exports) { + + /** + * Gets the last element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the last element of `array`. + * @example + * + * _.last([1, 2, 3]); + * // => 3 + */ + function last(array) { + var length = array == null ? 0 : array.length; + return length ? array[length - 1] : undefined; + } + + module.exports = last; + + +/***/ }), +/* 229 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseDifference = __webpack_require__(115), + baseFlatten = __webpack_require__(108), + baseRest = __webpack_require__(157), + isArrayLikeObject = __webpack_require__(166), + last = __webpack_require__(228); + + /** + * This method is like `_.difference` except that it accepts `comparator` + * which is invoked to compare elements of `array` to `values`. The order and + * references of result values are determined by the first array. The comparator + * is invoked with two arguments: (arrVal, othVal). + * + * **Note:** Unlike `_.pullAllWith`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {...Array} [values] The values to exclude. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; + * + * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual); + * // => [{ 'x': 2, 'y': 1 }] + */ + var differenceWith = baseRest(function(array, values) { + var comparator = last(values); + if (isArrayLikeObject(comparator)) { + comparator = undefined; + } + return isArrayLikeObject(array) + ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator) + : []; + }); + + module.exports = differenceWith; + + +/***/ }), +/* 230 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseSlice = __webpack_require__(86), + toInteger = __webpack_require__(100); + + /** + * Creates a slice of `array` with `n` elements dropped from the beginning. + * + * @static + * @memberOf _ + * @since 0.5.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to drop. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.drop([1, 2, 3]); + * // => [2, 3] + * + * _.drop([1, 2, 3], 2); + * // => [3] + * + * _.drop([1, 2, 3], 5); + * // => [] + * + * _.drop([1, 2, 3], 0); + * // => [1, 2, 3] + */ + function drop(array, n, guard) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + n = (guard || n === undefined) ? 1 : toInteger(n); + return baseSlice(array, n < 0 ? 0 : n, length); + } + + module.exports = drop; + + +/***/ }), +/* 231 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseSlice = __webpack_require__(86), + toInteger = __webpack_require__(100); + + /** + * Creates a slice of `array` with `n` elements dropped from the end. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to drop. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.dropRight([1, 2, 3]); + * // => [1, 2] + * + * _.dropRight([1, 2, 3], 2); + * // => [1] + * + * _.dropRight([1, 2, 3], 5); + * // => [] + * + * _.dropRight([1, 2, 3], 0); + * // => [1, 2, 3] + */ + function dropRight(array, n, guard) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + n = (guard || n === undefined) ? 1 : toInteger(n); + n = length - n; + return baseSlice(array, 0, n < 0 ? 0 : n); + } + + module.exports = dropRight; + + +/***/ }), +/* 232 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseIteratee = __webpack_require__(168), + baseWhile = __webpack_require__(233); + + /** + * Creates a slice of `array` excluding elements dropped from the end. + * Elements are dropped until `predicate` returns falsey. The predicate is + * invoked with three arguments: (value, index, array). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the slice of `array`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': false } + * ]; + * + * _.dropRightWhile(users, function(o) { return !o.active; }); + * // => objects for ['barney'] + * + * // The `_.matches` iteratee shorthand. + * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false }); + * // => objects for ['barney', 'fred'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.dropRightWhile(users, ['active', false]); + * // => objects for ['barney'] + * + * // The `_.property` iteratee shorthand. + * _.dropRightWhile(users, 'active'); + * // => objects for ['barney', 'fred', 'pebbles'] + */ + function dropRightWhile(array, predicate) { + return (array && array.length) + ? baseWhile(array, baseIteratee(predicate, 3), true, true) + : []; + } + + module.exports = dropRightWhile; + + +/***/ }), +/* 233 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseSlice = __webpack_require__(86); + + /** + * The base implementation of methods like `_.dropWhile` and `_.takeWhile` + * without support for iteratee shorthands. + * + * @private + * @param {Array} array The array to query. + * @param {Function} predicate The function invoked per iteration. + * @param {boolean} [isDrop] Specify dropping elements instead of taking them. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Array} Returns the slice of `array`. + */ + function baseWhile(array, predicate, isDrop, fromRight) { + var length = array.length, + index = fromRight ? length : -1; + + while ((fromRight ? index-- : ++index < length) && + predicate(array[index], index, array)) {} + + return isDrop + ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length)) + : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index)); + } + + module.exports = baseWhile; + + +/***/ }), +/* 234 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseIteratee = __webpack_require__(168), + baseWhile = __webpack_require__(233); + + /** + * Creates a slice of `array` excluding elements dropped from the beginning. + * Elements are dropped until `predicate` returns falsey. The predicate is + * invoked with three arguments: (value, index, array). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the slice of `array`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.dropWhile(users, function(o) { return !o.active; }); + * // => objects for ['pebbles'] + * + * // The `_.matches` iteratee shorthand. + * _.dropWhile(users, { 'user': 'barney', 'active': false }); + * // => objects for ['fred', 'pebbles'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.dropWhile(users, ['active', false]); + * // => objects for ['pebbles'] + * + * // The `_.property` iteratee shorthand. + * _.dropWhile(users, 'active'); + * // => objects for ['barney', 'fred', 'pebbles'] + */ + function dropWhile(array, predicate) { + return (array && array.length) + ? baseWhile(array, baseIteratee(predicate, 3), true) + : []; + } + + module.exports = dropWhile; + + +/***/ }), +/* 235 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseFill = __webpack_require__(236), + isIterateeCall = __webpack_require__(87); + + /** + * Fills elements of `array` with `value` from `start` up to, but not + * including, `end`. + * + * **Note:** This method mutates `array`. + * + * @static + * @memberOf _ + * @since 3.2.0 + * @category Array + * @param {Array} array The array to fill. + * @param {*} value The value to fill `array` with. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns `array`. + * @example + * + * var array = [1, 2, 3]; + * + * _.fill(array, 'a'); + * console.log(array); + * // => ['a', 'a', 'a'] + * + * _.fill(Array(3), 2); + * // => [2, 2, 2] + * + * _.fill([4, 6, 8, 10], '*', 1, 3); + * // => [4, '*', '*', 10] + */ + function fill(array, value, start, end) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + if (start && typeof start != 'number' && isIterateeCall(array, value, start)) { + start = 0; + end = length; + } + return baseFill(array, value, start, end); + } + + module.exports = fill; + + +/***/ }), +/* 236 */ +/***/ (function(module, exports, __webpack_require__) { + + var toInteger = __webpack_require__(100), + toLength = __webpack_require__(237); + + /** + * The base implementation of `_.fill` without an iteratee call guard. + * + * @private + * @param {Array} array The array to fill. + * @param {*} value The value to fill `array` with. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns `array`. + */ + function baseFill(array, value, start, end) { + var length = array.length; + + start = toInteger(start); + if (start < 0) { + start = -start > length ? 0 : (length + start); + } + end = (end === undefined || end > length) ? length : toInteger(end); + if (end < 0) { + end += length; + } + end = start > end ? 0 : toLength(end); + while (start < end) { + array[start++] = value; + } + return array; + } + + module.exports = baseFill; + + +/***/ }), +/* 237 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseClamp = __webpack_require__(238), + toInteger = __webpack_require__(100); + + /** Used as references for the maximum length and index of an array. */ + var MAX_ARRAY_LENGTH = 4294967295; + + /** + * Converts `value` to an integer suitable for use as the length of an + * array-like object. + * + * **Note:** This method is based on + * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toLength(3.2); + * // => 3 + * + * _.toLength(Number.MIN_VALUE); + * // => 0 + * + * _.toLength(Infinity); + * // => 4294967295 + * + * _.toLength('3.2'); + * // => 3 + */ + function toLength(value) { + return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0; + } + + module.exports = toLength; + + +/***/ }), +/* 238 */ +/***/ (function(module, exports) { + + /** + * The base implementation of `_.clamp` which doesn't coerce arguments. + * + * @private + * @param {number} number The number to clamp. + * @param {number} [lower] The lower bound. + * @param {number} upper The upper bound. + * @returns {number} Returns the clamped number. + */ + function baseClamp(number, lower, upper) { + if (number === number) { + if (upper !== undefined) { + number = number <= upper ? number : upper; + } + if (lower !== undefined) { + number = number >= lower ? number : lower; + } + } + return number; + } + + module.exports = baseClamp; + + +/***/ }), +/* 239 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseFindIndex = __webpack_require__(150), + baseIteratee = __webpack_require__(168), + toInteger = __webpack_require__(100); + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeMax = Math.max; + + /** + * This method is like `_.find` except that it returns the index of the first + * element `predicate` returns truthy for instead of the element itself. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.findIndex(users, function(o) { return o.user == 'barney'; }); + * // => 0 + * + * // The `_.matches` iteratee shorthand. + * _.findIndex(users, { 'user': 'fred', 'active': false }); + * // => 1 + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findIndex(users, ['active', false]); + * // => 0 + * + * // The `_.property` iteratee shorthand. + * _.findIndex(users, 'active'); + * // => 2 + */ + function findIndex(array, predicate, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = fromIndex == null ? 0 : toInteger(fromIndex); + if (index < 0) { + index = nativeMax(length + index, 0); + } + return baseFindIndex(array, baseIteratee(predicate, 3), index); + } + + module.exports = findIndex; + + +/***/ }), +/* 240 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseFindIndex = __webpack_require__(150), + baseIteratee = __webpack_require__(168), + toInteger = __webpack_require__(100); + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeMax = Math.max, + nativeMin = Math.min; + + /** + * This method is like `_.findIndex` except that it iterates over elements + * of `collection` from right to left. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=array.length-1] The index to search from. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': false } + * ]; + * + * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; }); + * // => 2 + * + * // The `_.matches` iteratee shorthand. + * _.findLastIndex(users, { 'user': 'barney', 'active': true }); + * // => 0 + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findLastIndex(users, ['active', false]); + * // => 2 + * + * // The `_.property` iteratee shorthand. + * _.findLastIndex(users, 'active'); + * // => 0 + */ + function findLastIndex(array, predicate, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = length - 1; + if (fromIndex !== undefined) { + index = toInteger(fromIndex); + index = fromIndex < 0 + ? nativeMax(length + index, 0) + : nativeMin(index, length - 1); + } + return baseFindIndex(array, baseIteratee(predicate, 3), index, true); + } + + module.exports = findLastIndex; + + +/***/ }), +/* 241 */ +/***/ (function(module, exports, __webpack_require__) { + + module.exports = __webpack_require__(242); + + +/***/ }), +/* 242 */ +/***/ (function(module, exports) { + + /** + * Gets the first element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @alias first + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the first element of `array`. + * @example + * + * _.head([1, 2, 3]); + * // => 1 + * + * _.head([]); + * // => undefined + */ + function head(array) { + return (array && array.length) ? array[0] : undefined; + } + + module.exports = head; + + +/***/ }), +/* 243 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseFlatten = __webpack_require__(108); + + /** + * Flattens `array` a single level deep. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flatten([1, [2, [3, [4]], 5]]); + * // => [1, 2, [3, [4]], 5] + */ + function flatten(array) { + var length = array == null ? 0 : array.length; + return length ? baseFlatten(array, 1) : []; + } + + module.exports = flatten; + + +/***/ }), +/* 244 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseFlatten = __webpack_require__(108); + + /** Used as references for various `Number` constants. */ + var INFINITY = 1 / 0; + + /** + * Recursively flattens `array`. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flattenDeep([1, [2, [3, [4]], 5]]); + * // => [1, 2, 3, 4, 5] + */ + function flattenDeep(array) { + var length = array == null ? 0 : array.length; + return length ? baseFlatten(array, INFINITY) : []; + } + + module.exports = flattenDeep; + + +/***/ }), +/* 245 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseFlatten = __webpack_require__(108), + toInteger = __webpack_require__(100); + + /** + * Recursively flatten `array` up to `depth` times. + * + * @static + * @memberOf _ + * @since 4.4.0 + * @category Array + * @param {Array} array The array to flatten. + * @param {number} [depth=1] The maximum recursion depth. + * @returns {Array} Returns the new flattened array. + * @example + * + * var array = [1, [2, [3, [4]], 5]]; + * + * _.flattenDepth(array, 1); + * // => [1, 2, [3, [4]], 5] + * + * _.flattenDepth(array, 2); + * // => [1, 2, 3, [4], 5] + */ + function flattenDepth(array, depth) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + depth = depth === undefined ? 1 : toInteger(depth); + return baseFlatten(array, depth); + } + + module.exports = flattenDepth; + + +/***/ }), +/* 246 */ +/***/ (function(module, exports) { + + /** + * The inverse of `_.toPairs`; this method returns an object composed + * from key-value `pairs`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} pairs The key-value pairs. + * @returns {Object} Returns the new object. + * @example + * + * _.fromPairs([['a', 1], ['b', 2]]); + * // => { 'a': 1, 'b': 2 } + */ + function fromPairs(pairs) { + var index = -1, + length = pairs == null ? 0 : pairs.length, + result = {}; + + while (++index < length) { + var pair = pairs[index]; + result[pair[0]] = pair[1]; + } + return result; + } + + module.exports = fromPairs; + + +/***/ }), +/* 247 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseIndexOf = __webpack_require__(149), + toInteger = __webpack_require__(100); + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeMax = Math.max; + + /** + * Gets the index at which the first occurrence of `value` is found in `array` + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. If `fromIndex` is negative, it's used as the + * offset from the end of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} [fromIndex=0] The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.indexOf([1, 2, 1, 2], 2); + * // => 1 + * + * // Search from the `fromIndex`. + * _.indexOf([1, 2, 1, 2], 2, 2); + * // => 3 + */ + function indexOf(array, value, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = fromIndex == null ? 0 : toInteger(fromIndex); + if (index < 0) { + index = nativeMax(length + index, 0); + } + return baseIndexOf(array, value, index); + } + + module.exports = indexOf; + + +/***/ }), +/* 248 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseSlice = __webpack_require__(86); + + /** + * Gets all but the last element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.initial([1, 2, 3]); + * // => [1, 2] + */ + function initial(array) { + var length = array == null ? 0 : array.length; + return length ? baseSlice(array, 0, -1) : []; + } + + module.exports = initial; + + +/***/ }), +/* 249 */ +/***/ (function(module, exports, __webpack_require__) { + + var arrayMap = __webpack_require__(154), + baseIntersection = __webpack_require__(250), + baseRest = __webpack_require__(157), + castArrayLikeObject = __webpack_require__(251); + + /** + * Creates an array of unique values that are included in all given arrays + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. The order and references of result values are + * determined by the first array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of intersecting values. + * @example + * + * _.intersection([2, 1], [2, 3]); + * // => [2] + */ + var intersection = baseRest(function(arrays) { + var mapped = arrayMap(arrays, castArrayLikeObject); + return (mapped.length && mapped[0] === arrays[0]) + ? baseIntersection(mapped) + : []; + }); + + module.exports = intersection; + + +/***/ }), +/* 250 */ +/***/ (function(module, exports, __webpack_require__) { + + var SetCache = __webpack_require__(116), + arrayIncludes = __webpack_require__(148), + arrayIncludesWith = __webpack_require__(153), + arrayMap = __webpack_require__(154), + baseUnary = __webpack_require__(155), + cacheHas = __webpack_require__(156); + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeMin = Math.min; + + /** + * The base implementation of methods like `_.intersection`, without support + * for iteratee shorthands, that accepts an array of arrays to inspect. + * + * @private + * @param {Array} arrays The arrays to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of shared values. + */ + function baseIntersection(arrays, iteratee, comparator) { + var includes = comparator ? arrayIncludesWith : arrayIncludes, + length = arrays[0].length, + othLength = arrays.length, + othIndex = othLength, + caches = Array(othLength), + maxLength = Infinity, + result = []; + + while (othIndex--) { + var array = arrays[othIndex]; + if (othIndex && iteratee) { + array = arrayMap(array, baseUnary(iteratee)); + } + maxLength = nativeMin(array.length, maxLength); + caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120)) + ? new SetCache(othIndex && array) + : undefined; + } + array = arrays[0]; + + var index = -1, + seen = caches[0]; + + outer: + while (++index < length && result.length < maxLength) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + + value = (comparator || value !== 0) ? value : 0; + if (!(seen + ? cacheHas(seen, computed) + : includes(result, computed, comparator) + )) { + othIndex = othLength; + while (--othIndex) { + var cache = caches[othIndex]; + if (!(cache + ? cacheHas(cache, computed) + : includes(arrays[othIndex], computed, comparator)) + ) { + continue outer; + } + } + if (seen) { + seen.push(computed); + } + result.push(value); + } + } + return result; + } + + module.exports = baseIntersection; + + +/***/ }), +/* 251 */ +/***/ (function(module, exports, __webpack_require__) { + + var isArrayLikeObject = __webpack_require__(166); + + /** + * Casts `value` to an empty array if it's not an array like object. + * + * @private + * @param {*} value The value to inspect. + * @returns {Array|Object} Returns the cast array-like object. + */ + function castArrayLikeObject(value) { + return isArrayLikeObject(value) ? value : []; + } + + module.exports = castArrayLikeObject; + + +/***/ }), +/* 252 */ +/***/ (function(module, exports, __webpack_require__) { + + var arrayMap = __webpack_require__(154), + baseIntersection = __webpack_require__(250), + baseIteratee = __webpack_require__(168), + baseRest = __webpack_require__(157), + castArrayLikeObject = __webpack_require__(251), + last = __webpack_require__(228); + + /** + * This method is like `_.intersection` except that it accepts `iteratee` + * which is invoked for each element of each `arrays` to generate the criterion + * by which they're compared. The order and references of result values are + * determined by the first array. The iteratee is invoked with one argument: + * (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new array of intersecting values. + * @example + * + * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor); + * // => [2.1] + * + * // The `_.property` iteratee shorthand. + * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); + * // => [{ 'x': 1 }] + */ + var intersectionBy = baseRest(function(arrays) { + var iteratee = last(arrays), + mapped = arrayMap(arrays, castArrayLikeObject); + + if (iteratee === last(mapped)) { + iteratee = undefined; + } else { + mapped.pop(); + } + return (mapped.length && mapped[0] === arrays[0]) + ? baseIntersection(mapped, baseIteratee(iteratee, 2)) + : []; + }); + + module.exports = intersectionBy; + + +/***/ }), +/* 253 */ +/***/ (function(module, exports, __webpack_require__) { + + var arrayMap = __webpack_require__(154), + baseIntersection = __webpack_require__(250), + baseRest = __webpack_require__(157), + castArrayLikeObject = __webpack_require__(251), + last = __webpack_require__(228); + + /** + * This method is like `_.intersection` except that it accepts `comparator` + * which is invoked to compare elements of `arrays`. The order and references + * of result values are determined by the first array. The comparator is + * invoked with two arguments: (arrVal, othVal). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of intersecting values. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; + * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; + * + * _.intersectionWith(objects, others, _.isEqual); + * // => [{ 'x': 1, 'y': 2 }] + */ + var intersectionWith = baseRest(function(arrays) { + var comparator = last(arrays), + mapped = arrayMap(arrays, castArrayLikeObject); + + comparator = typeof comparator == 'function' ? comparator : undefined; + if (comparator) { + mapped.pop(); + } + return (mapped.length && mapped[0] === arrays[0]) + ? baseIntersection(mapped, undefined, comparator) + : []; + }); + + module.exports = intersectionWith; + + +/***/ }), +/* 254 */ +/***/ (function(module, exports) { + + /** Used for built-in method references. */ + var arrayProto = Array.prototype; + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeJoin = arrayProto.join; + + /** + * Converts all elements in `array` into a string separated by `separator`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to convert. + * @param {string} [separator=','] The element separator. + * @returns {string} Returns the joined string. + * @example + * + * _.join(['a', 'b', 'c'], '~'); + * // => 'a~b~c' + */ + function join(array, separator) { + return array == null ? '' : nativeJoin.call(array, separator); + } + + module.exports = join; + + +/***/ }), +/* 255 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseFindIndex = __webpack_require__(150), + baseIsNaN = __webpack_require__(151), + strictLastIndexOf = __webpack_require__(256), + toInteger = __webpack_require__(100); + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeMax = Math.max, + nativeMin = Math.min; + + /** + * This method is like `_.indexOf` except that it iterates over elements of + * `array` from right to left. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} [fromIndex=array.length-1] The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.lastIndexOf([1, 2, 1, 2], 2); + * // => 3 + * + * // Search from the `fromIndex`. + * _.lastIndexOf([1, 2, 1, 2], 2, 2); + * // => 1 + */ + function lastIndexOf(array, value, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = length; + if (fromIndex !== undefined) { + index = toInteger(fromIndex); + index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1); + } + return value === value + ? strictLastIndexOf(array, value, index) + : baseFindIndex(array, baseIsNaN, index, true); + } + + module.exports = lastIndexOf; + + +/***/ }), +/* 256 */ +/***/ (function(module, exports) { + + /** + * A specialized version of `_.lastIndexOf` which performs strict equality + * comparisons of values, i.e. `===`. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function strictLastIndexOf(array, value, fromIndex) { + var index = fromIndex + 1; + while (index--) { + if (array[index] === value) { + return index; + } + } + return index; + } + + module.exports = strictLastIndexOf; + + +/***/ }), +/* 257 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseNth = __webpack_require__(258), + toInteger = __webpack_require__(100); + + /** + * Gets the element at index `n` of `array`. If `n` is negative, the nth + * element from the end is returned. + * + * @static + * @memberOf _ + * @since 4.11.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=0] The index of the element to return. + * @returns {*} Returns the nth element of `array`. + * @example + * + * var array = ['a', 'b', 'c', 'd']; + * + * _.nth(array, 1); + * // => 'b' + * + * _.nth(array, -2); + * // => 'c'; + */ + function nth(array, n) { + return (array && array.length) ? baseNth(array, toInteger(n)) : undefined; + } + + module.exports = nth; + + +/***/ }), +/* 258 */ +/***/ (function(module, exports, __webpack_require__) { + + var isIndex = __webpack_require__(99); + + /** + * The base implementation of `_.nth` which doesn't coerce arguments. + * + * @private + * @param {Array} array The array to query. + * @param {number} n The index of the element to return. + * @returns {*} Returns the nth element of `array`. + */ + function baseNth(array, n) { + var length = array.length; + if (!length) { + return; + } + n += n < 0 ? length : 0; + return isIndex(n, length) ? array[n] : undefined; + } + + module.exports = baseNth; + + +/***/ }), +/* 259 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseRest = __webpack_require__(157), + pullAll = __webpack_require__(260); + + /** + * Removes all given values from `array` using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove` + * to remove elements from an array by predicate. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Array + * @param {Array} array The array to modify. + * @param {...*} [values] The values to remove. + * @returns {Array} Returns `array`. + * @example + * + * var array = ['a', 'b', 'c', 'a', 'b', 'c']; + * + * _.pull(array, 'a', 'c'); + * console.log(array); + * // => ['b', 'b'] + */ + var pull = baseRest(pullAll); + + module.exports = pull; + + +/***/ }), +/* 260 */ +/***/ (function(module, exports, __webpack_require__) { + + var basePullAll = __webpack_require__(261); + + /** + * This method is like `_.pull` except that it accepts an array of values to remove. + * + * **Note:** Unlike `_.difference`, this method mutates `array`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to modify. + * @param {Array} values The values to remove. + * @returns {Array} Returns `array`. + * @example + * + * var array = ['a', 'b', 'c', 'a', 'b', 'c']; + * + * _.pullAll(array, ['a', 'c']); + * console.log(array); + * // => ['b', 'b'] + */ + function pullAll(array, values) { + return (array && array.length && values && values.length) + ? basePullAll(array, values) + : array; + } + + module.exports = pullAll; + + +/***/ }), +/* 261 */ +/***/ (function(module, exports, __webpack_require__) { + + var arrayMap = __webpack_require__(154), + baseIndexOf = __webpack_require__(149), + baseIndexOfWith = __webpack_require__(262), + baseUnary = __webpack_require__(155), + copyArray = __webpack_require__(113); + + /** Used for built-in method references. */ + var arrayProto = Array.prototype; + + /** Built-in value references. */ + var splice = arrayProto.splice; + + /** + * The base implementation of `_.pullAllBy` without support for iteratee + * shorthands. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to remove. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns `array`. + */ + function basePullAll(array, values, iteratee, comparator) { + var indexOf = comparator ? baseIndexOfWith : baseIndexOf, + index = -1, + length = values.length, + seen = array; + + if (array === values) { + values = copyArray(values); + } + if (iteratee) { + seen = arrayMap(array, baseUnary(iteratee)); + } + while (++index < length) { + var fromIndex = 0, + value = values[index], + computed = iteratee ? iteratee(value) : value; + + while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) { + if (seen !== array) { + splice.call(seen, fromIndex, 1); + } + splice.call(array, fromIndex, 1); + } + } + return array; + } + + module.exports = basePullAll; + + +/***/ }), +/* 262 */ +/***/ (function(module, exports) { + + /** + * This function is like `baseIndexOf` except that it accepts a comparator. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @param {Function} comparator The comparator invoked per element. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function baseIndexOfWith(array, value, fromIndex, comparator) { + var index = fromIndex - 1, + length = array.length; + + while (++index < length) { + if (comparator(array[index], value)) { + return index; + } + } + return -1; + } + + module.exports = baseIndexOfWith; + + +/***/ }), +/* 263 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseIteratee = __webpack_require__(168), + basePullAll = __webpack_require__(261); + + /** + * This method is like `_.pullAll` except that it accepts `iteratee` which is + * invoked for each element of `array` and `values` to generate the criterion + * by which they're compared. The iteratee is invoked with one argument: (value). + * + * **Note:** Unlike `_.differenceBy`, this method mutates `array`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to modify. + * @param {Array} values The values to remove. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns `array`. + * @example + * + * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }]; + * + * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x'); + * console.log(array); + * // => [{ 'x': 2 }] + */ + function pullAllBy(array, values, iteratee) { + return (array && array.length && values && values.length) + ? basePullAll(array, values, baseIteratee(iteratee, 2)) + : array; + } + + module.exports = pullAllBy; + + +/***/ }), +/* 264 */ +/***/ (function(module, exports, __webpack_require__) { + + var basePullAll = __webpack_require__(261); + + /** + * This method is like `_.pullAll` except that it accepts `comparator` which + * is invoked to compare elements of `array` to `values`. The comparator is + * invoked with two arguments: (arrVal, othVal). + * + * **Note:** Unlike `_.differenceWith`, this method mutates `array`. + * + * @static + * @memberOf _ + * @since 4.6.0 + * @category Array + * @param {Array} array The array to modify. + * @param {Array} values The values to remove. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns `array`. + * @example + * + * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }]; + * + * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual); + * console.log(array); + * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }] + */ + function pullAllWith(array, values, comparator) { + return (array && array.length && values && values.length) + ? basePullAll(array, values, undefined, comparator) + : array; + } + + module.exports = pullAllWith; + + +/***/ }), +/* 265 */ +/***/ (function(module, exports, __webpack_require__) { + + var arrayMap = __webpack_require__(154), + baseAt = __webpack_require__(266), + basePullAt = __webpack_require__(267), + compareAscending = __webpack_require__(270), + flatRest = __webpack_require__(271), + isIndex = __webpack_require__(99); + + /** + * Removes elements from `array` corresponding to `indexes` and returns an + * array of removed elements. + * + * **Note:** Unlike `_.at`, this method mutates `array`. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to modify. + * @param {...(number|number[])} [indexes] The indexes of elements to remove. + * @returns {Array} Returns the new array of removed elements. + * @example + * + * var array = ['a', 'b', 'c', 'd']; + * var pulled = _.pullAt(array, [1, 3]); + * + * console.log(array); + * // => ['a', 'c'] + * + * console.log(pulled); + * // => ['b', 'd'] + */ + var pullAt = flatRest(function(array, indexes) { + var length = array == null ? 0 : array.length, + result = baseAt(array, indexes); + + basePullAt(array, arrayMap(indexes, function(index) { + return isIndex(index, length) ? +index : index; + }).sort(compareAscending)); + + return result; + }); + + module.exports = pullAt; + + +/***/ }), +/* 266 */ +/***/ (function(module, exports, __webpack_require__) { + + var get = __webpack_require__(212); + + /** + * The base implementation of `_.at` without support for individual paths. + * + * @private + * @param {Object} object The object to iterate over. + * @param {string[]} paths The property paths to pick. + * @returns {Array} Returns the picked elements. + */ + function baseAt(object, paths) { + var index = -1, + length = paths.length, + result = Array(length), + skip = object == null; + + while (++index < length) { + result[index] = skip ? undefined : get(object, paths[index]); + } + return result; + } + + module.exports = baseAt; + + +/***/ }), +/* 267 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseUnset = __webpack_require__(268), + isIndex = __webpack_require__(99); + + /** Used for built-in method references. */ + var arrayProto = Array.prototype; + + /** Built-in value references. */ + var splice = arrayProto.splice; + + /** + * The base implementation of `_.pullAt` without support for individual + * indexes or capturing the removed elements. + * + * @private + * @param {Array} array The array to modify. + * @param {number[]} indexes The indexes of elements to remove. + * @returns {Array} Returns `array`. + */ + function basePullAt(array, indexes) { + var length = array ? indexes.length : 0, + lastIndex = length - 1; + + while (length--) { + var index = indexes[length]; + if (length == lastIndex || index !== previous) { + var previous = index; + if (isIndex(index)) { + splice.call(array, index, 1); + } else { + baseUnset(array, index); + } + } + } + return array; + } + + module.exports = basePullAt; + + +/***/ }), +/* 268 */ +/***/ (function(module, exports, __webpack_require__) { + + var castPath = __webpack_require__(214), + last = __webpack_require__(228), + parent = __webpack_require__(269), + toKey = __webpack_require__(221); + + /** + * The base implementation of `_.unset`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The property path to unset. + * @returns {boolean} Returns `true` if the property is deleted, else `false`. + */ + function baseUnset(object, path) { + path = castPath(path, object); + object = parent(object, path); + return object == null || delete object[toKey(last(path))]; + } + + module.exports = baseUnset; + + +/***/ }), +/* 269 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseGet = __webpack_require__(213), + baseSlice = __webpack_require__(86); + + /** + * Gets the parent value at `path` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} path The path to get the parent value of. + * @returns {*} Returns the parent value. + */ + function parent(object, path) { + return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1)); + } + + module.exports = parent; + + +/***/ }), +/* 270 */ +/***/ (function(module, exports, __webpack_require__) { + + var isSymbol = __webpack_require__(103); + + /** + * Compares values to sort them in ascending order. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {number} Returns the sort order indicator for `value`. + */ + function compareAscending(value, other) { + if (value !== other) { + var valIsDefined = value !== undefined, + valIsNull = value === null, + valIsReflexive = value === value, + valIsSymbol = isSymbol(value); + + var othIsDefined = other !== undefined, + othIsNull = other === null, + othIsReflexive = other === other, + othIsSymbol = isSymbol(other); + + if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) || + (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) || + (valIsNull && othIsDefined && othIsReflexive) || + (!valIsDefined && othIsReflexive) || + !valIsReflexive) { + return 1; + } + if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) || + (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) || + (othIsNull && valIsDefined && valIsReflexive) || + (!othIsDefined && valIsReflexive) || + !othIsReflexive) { + return -1; + } + } + return 0; + } + + module.exports = compareAscending; + + +/***/ }), +/* 271 */ +/***/ (function(module, exports, __webpack_require__) { + + var flatten = __webpack_require__(243), + overRest = __webpack_require__(159), + setToString = __webpack_require__(161); + + /** + * A specialized version of `baseRest` which flattens the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @returns {Function} Returns the new function. + */ + function flatRest(func) { + return setToString(overRest(func, undefined, flatten), func + ''); + } + + module.exports = flatRest; + + +/***/ }), +/* 272 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseIteratee = __webpack_require__(168), + basePullAt = __webpack_require__(267); + + /** + * Removes all elements from `array` that `predicate` returns truthy for + * and returns an array of the removed elements. The predicate is invoked + * with three arguments: (value, index, array). + * + * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull` + * to pull elements from an array by value. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Array + * @param {Array} array The array to modify. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new array of removed elements. + * @example + * + * var array = [1, 2, 3, 4]; + * var evens = _.remove(array, function(n) { + * return n % 2 == 0; + * }); + * + * console.log(array); + * // => [1, 3] + * + * console.log(evens); + * // => [2, 4] + */ + function remove(array, predicate) { + var result = []; + if (!(array && array.length)) { + return result; + } + var index = -1, + indexes = [], + length = array.length; + + predicate = baseIteratee(predicate, 3); + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result.push(value); + indexes.push(index); + } + } + basePullAt(array, indexes); + return result; + } + + module.exports = remove; + + +/***/ }), +/* 273 */ +/***/ (function(module, exports) { + + /** Used for built-in method references. */ + var arrayProto = Array.prototype; + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeReverse = arrayProto.reverse; + + /** + * Reverses `array` so that the first element becomes the last, the second + * element becomes the second to last, and so on. + * + * **Note:** This method mutates `array` and is based on + * [`Array#reverse`](https://mdn.io/Array/reverse). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to modify. + * @returns {Array} Returns `array`. + * @example + * + * var array = [1, 2, 3]; + * + * _.reverse(array); + * // => [3, 2, 1] + * + * console.log(array); + * // => [3, 2, 1] + */ + function reverse(array) { + return array == null ? array : nativeReverse.call(array); + } + + module.exports = reverse; + + +/***/ }), +/* 274 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseSlice = __webpack_require__(86), + isIterateeCall = __webpack_require__(87), + toInteger = __webpack_require__(100); + + /** + * Creates a slice of `array` from `start` up to, but not including, `end`. + * + * **Note:** This method is used instead of + * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are + * returned. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to slice. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the slice of `array`. + */ + function slice(array, start, end) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + if (end && typeof end != 'number' && isIterateeCall(array, start, end)) { + start = 0; + end = length; + } + else { + start = start == null ? 0 : toInteger(start); + end = end === undefined ? length : toInteger(end); + } + return baseSlice(array, start, end); + } + + module.exports = slice; + + +/***/ }), +/* 275 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseSortedIndex = __webpack_require__(276); + + /** + * Uses a binary search to determine the lowest index at which `value` + * should be inserted into `array` in order to maintain its sort order. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + * @example + * + * _.sortedIndex([30, 50], 40); + * // => 1 + */ + function sortedIndex(array, value) { + return baseSortedIndex(array, value); + } + + module.exports = sortedIndex; + + +/***/ }), +/* 276 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseSortedIndexBy = __webpack_require__(277), + identity = __webpack_require__(158), + isSymbol = __webpack_require__(103); + + /** Used as references for the maximum length and index of an array. */ + var MAX_ARRAY_LENGTH = 4294967295, + HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1; + + /** + * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which + * performs a binary search of `array` to determine the index at which `value` + * should be inserted into `array` in order to maintain its sort order. + * + * @private + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {boolean} [retHighest] Specify returning the highest qualified index. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + */ + function baseSortedIndex(array, value, retHighest) { + var low = 0, + high = array == null ? low : array.length; + + if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) { + while (low < high) { + var mid = (low + high) >>> 1, + computed = array[mid]; + + if (computed !== null && !isSymbol(computed) && + (retHighest ? (computed <= value) : (computed < value))) { + low = mid + 1; + } else { + high = mid; + } + } + return high; + } + return baseSortedIndexBy(array, value, identity, retHighest); + } + + module.exports = baseSortedIndex; + + +/***/ }), +/* 277 */ +/***/ (function(module, exports, __webpack_require__) { + + var isSymbol = __webpack_require__(103); + + /** Used as references for the maximum length and index of an array. */ + var MAX_ARRAY_LENGTH = 4294967295, + MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1; + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeFloor = Math.floor, + nativeMin = Math.min; + + /** + * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy` + * which invokes `iteratee` for `value` and each element of `array` to compute + * their sort ranking. The iteratee is invoked with one argument; (value). + * + * @private + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {Function} iteratee The iteratee invoked per element. + * @param {boolean} [retHighest] Specify returning the highest qualified index. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + */ + function baseSortedIndexBy(array, value, iteratee, retHighest) { + value = iteratee(value); + + var low = 0, + high = array == null ? 0 : array.length, + valIsNaN = value !== value, + valIsNull = value === null, + valIsSymbol = isSymbol(value), + valIsUndefined = value === undefined; + + while (low < high) { + var mid = nativeFloor((low + high) / 2), + computed = iteratee(array[mid]), + othIsDefined = computed !== undefined, + othIsNull = computed === null, + othIsReflexive = computed === computed, + othIsSymbol = isSymbol(computed); + + if (valIsNaN) { + var setLow = retHighest || othIsReflexive; + } else if (valIsUndefined) { + setLow = othIsReflexive && (retHighest || othIsDefined); + } else if (valIsNull) { + setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull); + } else if (valIsSymbol) { + setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol); + } else if (othIsNull || othIsSymbol) { + setLow = false; + } else { + setLow = retHighest ? (computed <= value) : (computed < value); + } + if (setLow) { + low = mid + 1; + } else { + high = mid; + } + } + return nativeMin(high, MAX_ARRAY_INDEX); + } + + module.exports = baseSortedIndexBy; + + +/***/ }), +/* 278 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseIteratee = __webpack_require__(168), + baseSortedIndexBy = __webpack_require__(277); + + /** + * This method is like `_.sortedIndex` except that it accepts `iteratee` + * which is invoked for `value` and each element of `array` to compute their + * sort ranking. The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + * @example + * + * var objects = [{ 'x': 4 }, { 'x': 5 }]; + * + * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; }); + * // => 0 + * + * // The `_.property` iteratee shorthand. + * _.sortedIndexBy(objects, { 'x': 4 }, 'x'); + * // => 0 + */ + function sortedIndexBy(array, value, iteratee) { + return baseSortedIndexBy(array, value, baseIteratee(iteratee, 2)); + } + + module.exports = sortedIndexBy; + + +/***/ }), +/* 279 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseSortedIndex = __webpack_require__(276), + eq = __webpack_require__(88); + + /** + * This method is like `_.indexOf` except that it performs a binary + * search on a sorted `array`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.sortedIndexOf([4, 5, 5, 5, 6], 5); + * // => 1 + */ + function sortedIndexOf(array, value) { + var length = array == null ? 0 : array.length; + if (length) { + var index = baseSortedIndex(array, value); + if (index < length && eq(array[index], value)) { + return index; + } + } + return -1; + } + + module.exports = sortedIndexOf; + + +/***/ }), +/* 280 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseSortedIndex = __webpack_require__(276); + + /** + * This method is like `_.sortedIndex` except that it returns the highest + * index at which `value` should be inserted into `array` in order to + * maintain its sort order. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + * @example + * + * _.sortedLastIndex([4, 5, 5, 5, 6], 5); + * // => 4 + */ + function sortedLastIndex(array, value) { + return baseSortedIndex(array, value, true); + } + + module.exports = sortedLastIndex; + + +/***/ }), +/* 281 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseIteratee = __webpack_require__(168), + baseSortedIndexBy = __webpack_require__(277); + + /** + * This method is like `_.sortedLastIndex` except that it accepts `iteratee` + * which is invoked for `value` and each element of `array` to compute their + * sort ranking. The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + * @example + * + * var objects = [{ 'x': 4 }, { 'x': 5 }]; + * + * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; }); + * // => 1 + * + * // The `_.property` iteratee shorthand. + * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x'); + * // => 1 + */ + function sortedLastIndexBy(array, value, iteratee) { + return baseSortedIndexBy(array, value, baseIteratee(iteratee, 2), true); + } + + module.exports = sortedLastIndexBy; + + +/***/ }), +/* 282 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseSortedIndex = __webpack_require__(276), + eq = __webpack_require__(88); + + /** + * This method is like `_.lastIndexOf` except that it performs a binary + * search on a sorted `array`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5); + * // => 3 + */ + function sortedLastIndexOf(array, value) { + var length = array == null ? 0 : array.length; + if (length) { + var index = baseSortedIndex(array, value, true) - 1; + if (eq(array[index], value)) { + return index; + } + } + return -1; + } + + module.exports = sortedLastIndexOf; + + +/***/ }), +/* 283 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseSortedUniq = __webpack_require__(284); + + /** + * This method is like `_.uniq` except that it's designed and optimized + * for sorted arrays. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * _.sortedUniq([1, 1, 2]); + * // => [1, 2] + */ + function sortedUniq(array) { + return (array && array.length) + ? baseSortedUniq(array) + : []; + } + + module.exports = sortedUniq; + + +/***/ }), +/* 284 */ +/***/ (function(module, exports, __webpack_require__) { + + var eq = __webpack_require__(88); + + /** + * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without + * support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @returns {Array} Returns the new duplicate free array. + */ + function baseSortedUniq(array, iteratee) { + var index = -1, + length = array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + + if (!index || !eq(computed, seen)) { + var seen = computed; + result[resIndex++] = value === 0 ? 0 : value; + } + } + return result; + } + + module.exports = baseSortedUniq; + + +/***/ }), +/* 285 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseIteratee = __webpack_require__(168), + baseSortedUniq = __webpack_require__(284); + + /** + * This method is like `_.uniqBy` except that it's designed and optimized + * for sorted arrays. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor); + * // => [1.1, 2.3] + */ + function sortedUniqBy(array, iteratee) { + return (array && array.length) + ? baseSortedUniq(array, baseIteratee(iteratee, 2)) + : []; + } + + module.exports = sortedUniqBy; + + +/***/ }), +/* 286 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseSlice = __webpack_require__(86); + + /** + * Gets all but the first element of `array`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to query. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.tail([1, 2, 3]); + * // => [2, 3] + */ + function tail(array) { + var length = array == null ? 0 : array.length; + return length ? baseSlice(array, 1, length) : []; + } + + module.exports = tail; + + +/***/ }), +/* 287 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseSlice = __webpack_require__(86), + toInteger = __webpack_require__(100); + + /** + * Creates a slice of `array` with `n` elements taken from the beginning. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to take. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.take([1, 2, 3]); + * // => [1] + * + * _.take([1, 2, 3], 2); + * // => [1, 2] + * + * _.take([1, 2, 3], 5); + * // => [1, 2, 3] + * + * _.take([1, 2, 3], 0); + * // => [] + */ + function take(array, n, guard) { + if (!(array && array.length)) { + return []; + } + n = (guard || n === undefined) ? 1 : toInteger(n); + return baseSlice(array, 0, n < 0 ? 0 : n); + } + + module.exports = take; + + +/***/ }), +/* 288 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseSlice = __webpack_require__(86), + toInteger = __webpack_require__(100); + + /** + * Creates a slice of `array` with `n` elements taken from the end. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to take. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.takeRight([1, 2, 3]); + * // => [3] + * + * _.takeRight([1, 2, 3], 2); + * // => [2, 3] + * + * _.takeRight([1, 2, 3], 5); + * // => [1, 2, 3] + * + * _.takeRight([1, 2, 3], 0); + * // => [] + */ + function takeRight(array, n, guard) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + n = (guard || n === undefined) ? 1 : toInteger(n); + n = length - n; + return baseSlice(array, n < 0 ? 0 : n, length); + } + + module.exports = takeRight; + + +/***/ }), +/* 289 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseIteratee = __webpack_require__(168), + baseWhile = __webpack_require__(233); + + /** + * Creates a slice of `array` with elements taken from the end. Elements are + * taken until `predicate` returns falsey. The predicate is invoked with + * three arguments: (value, index, array). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the slice of `array`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': false } + * ]; + * + * _.takeRightWhile(users, function(o) { return !o.active; }); + * // => objects for ['fred', 'pebbles'] + * + * // The `_.matches` iteratee shorthand. + * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false }); + * // => objects for ['pebbles'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.takeRightWhile(users, ['active', false]); + * // => objects for ['fred', 'pebbles'] + * + * // The `_.property` iteratee shorthand. + * _.takeRightWhile(users, 'active'); + * // => [] + */ + function takeRightWhile(array, predicate) { + return (array && array.length) + ? baseWhile(array, baseIteratee(predicate, 3), false, true) + : []; + } + + module.exports = takeRightWhile; + + +/***/ }), +/* 290 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseIteratee = __webpack_require__(168), + baseWhile = __webpack_require__(233); + + /** + * Creates a slice of `array` with elements taken from the beginning. Elements + * are taken until `predicate` returns falsey. The predicate is invoked with + * three arguments: (value, index, array). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the slice of `array`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.takeWhile(users, function(o) { return !o.active; }); + * // => objects for ['barney', 'fred'] + * + * // The `_.matches` iteratee shorthand. + * _.takeWhile(users, { 'user': 'barney', 'active': false }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.takeWhile(users, ['active', false]); + * // => objects for ['barney', 'fred'] + * + * // The `_.property` iteratee shorthand. + * _.takeWhile(users, 'active'); + * // => [] + */ + function takeWhile(array, predicate) { + return (array && array.length) + ? baseWhile(array, baseIteratee(predicate, 3)) + : []; + } + + module.exports = takeWhile; + + +/***/ }), +/* 291 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseFlatten = __webpack_require__(108), + baseRest = __webpack_require__(157), + baseUniq = __webpack_require__(292), + isArrayLikeObject = __webpack_require__(166); + + /** + * Creates an array of unique values, in order, from all given arrays using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of combined values. + * @example + * + * _.union([2], [1, 2]); + * // => [2, 1] + */ + var union = baseRest(function(arrays) { + return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true)); + }); + + module.exports = union; + + +/***/ }), +/* 292 */ +/***/ (function(module, exports, __webpack_require__) { + + var SetCache = __webpack_require__(116), + arrayIncludes = __webpack_require__(148), + arrayIncludesWith = __webpack_require__(153), + cacheHas = __webpack_require__(156), + createSet = __webpack_require__(293), + setToArray = __webpack_require__(184); + + /** Used as the size to enable large array optimizations. */ + var LARGE_ARRAY_SIZE = 200; + + /** + * The base implementation of `_.uniqBy` without support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new duplicate free array. + */ + function baseUniq(array, iteratee, comparator) { + var index = -1, + includes = arrayIncludes, + length = array.length, + isCommon = true, + result = [], + seen = result; + + if (comparator) { + isCommon = false; + includes = arrayIncludesWith; + } + else if (length >= LARGE_ARRAY_SIZE) { + var set = iteratee ? null : createSet(array); + if (set) { + return setToArray(set); + } + isCommon = false; + includes = cacheHas; + seen = new SetCache; + } + else { + seen = iteratee ? [] : result; + } + outer: + while (++index < length) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + + value = (comparator || value !== 0) ? value : 0; + if (isCommon && computed === computed) { + var seenIndex = seen.length; + while (seenIndex--) { + if (seen[seenIndex] === computed) { + continue outer; + } + } + if (iteratee) { + seen.push(computed); + } + result.push(value); + } + else if (!includes(seen, computed, comparator)) { + if (seen !== result) { + seen.push(computed); + } + result.push(value); + } + } + return result; + } + + module.exports = baseUniq; + + +/***/ }), +/* 293 */ +/***/ (function(module, exports, __webpack_require__) { + + var Set = __webpack_require__(206), + noop = __webpack_require__(294), + setToArray = __webpack_require__(184); + + /** Used as references for various `Number` constants. */ + var INFINITY = 1 / 0; + + /** + * Creates a set object of `values`. + * + * @private + * @param {Array} values The values to add to the set. + * @returns {Object} Returns the new set. + */ + var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) { + return new Set(values); + }; + + module.exports = createSet; + + +/***/ }), +/* 294 */ +/***/ (function(module, exports) { + + /** + * This method returns `undefined`. + * + * @static + * @memberOf _ + * @since 2.3.0 + * @category Util + * @example + * + * _.times(2, _.noop); + * // => [undefined, undefined] + */ + function noop() { + // No operation performed. + } + + module.exports = noop; + + +/***/ }), +/* 295 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseFlatten = __webpack_require__(108), + baseIteratee = __webpack_require__(168), + baseRest = __webpack_require__(157), + baseUniq = __webpack_require__(292), + isArrayLikeObject = __webpack_require__(166), + last = __webpack_require__(228); + + /** + * This method is like `_.union` except that it accepts `iteratee` which is + * invoked for each element of each `arrays` to generate the criterion by + * which uniqueness is computed. Result values are chosen from the first + * array in which the value occurs. The iteratee is invoked with one argument: + * (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new array of combined values. + * @example + * + * _.unionBy([2.1], [1.2, 2.3], Math.floor); + * // => [2.1, 1.2] + * + * // The `_.property` iteratee shorthand. + * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); + * // => [{ 'x': 1 }, { 'x': 2 }] + */ + var unionBy = baseRest(function(arrays) { + var iteratee = last(arrays); + if (isArrayLikeObject(iteratee)) { + iteratee = undefined; + } + return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), baseIteratee(iteratee, 2)); + }); + + module.exports = unionBy; + + +/***/ }), +/* 296 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseFlatten = __webpack_require__(108), + baseRest = __webpack_require__(157), + baseUniq = __webpack_require__(292), + isArrayLikeObject = __webpack_require__(166), + last = __webpack_require__(228); + + /** + * This method is like `_.union` except that it accepts `comparator` which + * is invoked to compare elements of `arrays`. Result values are chosen from + * the first array in which the value occurs. The comparator is invoked + * with two arguments: (arrVal, othVal). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of combined values. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; + * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; + * + * _.unionWith(objects, others, _.isEqual); + * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }] + */ + var unionWith = baseRest(function(arrays) { + var comparator = last(arrays); + comparator = typeof comparator == 'function' ? comparator : undefined; + return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator); + }); + + module.exports = unionWith; + + +/***/ }), +/* 297 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseUniq = __webpack_require__(292); + + /** + * Creates a duplicate-free version of an array, using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons, in which only the first occurrence of each element + * is kept. The order of result values is determined by the order they occur + * in the array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * _.uniq([2, 1, 2]); + * // => [2, 1] + */ + function uniq(array) { + return (array && array.length) ? baseUniq(array) : []; + } + + module.exports = uniq; + + +/***/ }), +/* 298 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseIteratee = __webpack_require__(168), + baseUniq = __webpack_require__(292); + + /** + * This method is like `_.uniq` except that it accepts `iteratee` which is + * invoked for each element in `array` to generate the criterion by which + * uniqueness is computed. The order of result values is determined by the + * order they occur in the array. The iteratee is invoked with one argument: + * (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * _.uniqBy([2.1, 1.2, 2.3], Math.floor); + * // => [2.1, 1.2] + * + * // The `_.property` iteratee shorthand. + * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x'); + * // => [{ 'x': 1 }, { 'x': 2 }] + */ + function uniqBy(array, iteratee) { + return (array && array.length) ? baseUniq(array, baseIteratee(iteratee, 2)) : []; + } + + module.exports = uniqBy; + + +/***/ }), +/* 299 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseUniq = __webpack_require__(292); + + /** + * This method is like `_.uniq` except that it accepts `comparator` which + * is invoked to compare elements of `array`. The order of result values is + * determined by the order they occur in the array.The comparator is invoked + * with two arguments: (arrVal, othVal). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }]; + * + * _.uniqWith(objects, _.isEqual); + * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }] + */ + function uniqWith(array, comparator) { + comparator = typeof comparator == 'function' ? comparator : undefined; + return (array && array.length) ? baseUniq(array, undefined, comparator) : []; + } + + module.exports = uniqWith; + + +/***/ }), +/* 300 */ +/***/ (function(module, exports, __webpack_require__) { + + var arrayFilter = __webpack_require__(189), + arrayMap = __webpack_require__(154), + baseProperty = __webpack_require__(226), + baseTimes = __webpack_require__(193), + isArrayLikeObject = __webpack_require__(166); + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeMax = Math.max; + + /** + * This method is like `_.zip` except that it accepts an array of grouped + * elements and creates an array regrouping the elements to their pre-zip + * configuration. + * + * @static + * @memberOf _ + * @since 1.2.0 + * @category Array + * @param {Array} array The array of grouped elements to process. + * @returns {Array} Returns the new array of regrouped elements. + * @example + * + * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]); + * // => [['a', 1, true], ['b', 2, false]] + * + * _.unzip(zipped); + * // => [['a', 'b'], [1, 2], [true, false]] + */ + function unzip(array) { + if (!(array && array.length)) { + return []; + } + var length = 0; + array = arrayFilter(array, function(group) { + if (isArrayLikeObject(group)) { + length = nativeMax(group.length, length); + return true; + } + }); + return baseTimes(length, function(index) { + return arrayMap(array, baseProperty(index)); + }); + } + + module.exports = unzip; + + +/***/ }), +/* 301 */ +/***/ (function(module, exports, __webpack_require__) { + + var apply = __webpack_require__(160), + arrayMap = __webpack_require__(154), + unzip = __webpack_require__(300); + + /** + * This method is like `_.unzip` except that it accepts `iteratee` to specify + * how regrouped values should be combined. The iteratee is invoked with the + * elements of each group: (...group). + * + * @static + * @memberOf _ + * @since 3.8.0 + * @category Array + * @param {Array} array The array of grouped elements to process. + * @param {Function} [iteratee=_.identity] The function to combine + * regrouped values. + * @returns {Array} Returns the new array of regrouped elements. + * @example + * + * var zipped = _.zip([1, 2], [10, 20], [100, 200]); + * // => [[1, 10, 100], [2, 20, 200]] + * + * _.unzipWith(zipped, _.add); + * // => [3, 30, 300] + */ + function unzipWith(array, iteratee) { + if (!(array && array.length)) { + return []; + } + var result = unzip(array); + if (iteratee == null) { + return result; + } + return arrayMap(result, function(group) { + return apply(iteratee, undefined, group); + }); + } + + module.exports = unzipWith; + + +/***/ }), +/* 302 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseDifference = __webpack_require__(115), + baseRest = __webpack_require__(157), + isArrayLikeObject = __webpack_require__(166); + + /** + * Creates an array excluding all given values using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * **Note:** Unlike `_.pull`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {...*} [values] The values to exclude. + * @returns {Array} Returns the new array of filtered values. + * @see _.difference, _.xor + * @example + * + * _.without([2, 1, 2, 3], 1, 2); + * // => [3] + */ + var without = baseRest(function(array, values) { + return isArrayLikeObject(array) + ? baseDifference(array, values) + : []; + }); + + module.exports = without; + + +/***/ }), +/* 303 */ +/***/ (function(module, exports, __webpack_require__) { + + var arrayFilter = __webpack_require__(189), + baseRest = __webpack_require__(157), + baseXor = __webpack_require__(304), + isArrayLikeObject = __webpack_require__(166); + + /** + * Creates an array of unique values that is the + * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference) + * of the given arrays. The order of result values is determined by the order + * they occur in the arrays. + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of filtered values. + * @see _.difference, _.without + * @example + * + * _.xor([2, 1], [2, 3]); + * // => [1, 3] + */ + var xor = baseRest(function(arrays) { + return baseXor(arrayFilter(arrays, isArrayLikeObject)); + }); + + module.exports = xor; + + +/***/ }), +/* 304 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseDifference = __webpack_require__(115), + baseFlatten = __webpack_require__(108), + baseUniq = __webpack_require__(292); + + /** + * The base implementation of methods like `_.xor`, without support for + * iteratee shorthands, that accepts an array of arrays to inspect. + * + * @private + * @param {Array} arrays The arrays to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of values. + */ + function baseXor(arrays, iteratee, comparator) { + var length = arrays.length; + if (length < 2) { + return length ? baseUniq(arrays[0]) : []; + } + var index = -1, + result = Array(length); + + while (++index < length) { + var array = arrays[index], + othIndex = -1; + + while (++othIndex < length) { + if (othIndex != index) { + result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator); + } + } + } + return baseUniq(baseFlatten(result, 1), iteratee, comparator); + } + + module.exports = baseXor; + + +/***/ }), +/* 305 */ +/***/ (function(module, exports, __webpack_require__) { + + var arrayFilter = __webpack_require__(189), + baseIteratee = __webpack_require__(168), + baseRest = __webpack_require__(157), + baseXor = __webpack_require__(304), + isArrayLikeObject = __webpack_require__(166), + last = __webpack_require__(228); + + /** + * This method is like `_.xor` except that it accepts `iteratee` which is + * invoked for each element of each `arrays` to generate the criterion by + * which by which they're compared. The order of result values is determined + * by the order they occur in the arrays. The iteratee is invoked with one + * argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor); + * // => [1.2, 3.4] + * + * // The `_.property` iteratee shorthand. + * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); + * // => [{ 'x': 2 }] + */ + var xorBy = baseRest(function(arrays) { + var iteratee = last(arrays); + if (isArrayLikeObject(iteratee)) { + iteratee = undefined; + } + return baseXor(arrayFilter(arrays, isArrayLikeObject), baseIteratee(iteratee, 2)); + }); + + module.exports = xorBy; + + +/***/ }), +/* 306 */ +/***/ (function(module, exports, __webpack_require__) { + + var arrayFilter = __webpack_require__(189), + baseRest = __webpack_require__(157), + baseXor = __webpack_require__(304), + isArrayLikeObject = __webpack_require__(166), + last = __webpack_require__(228); + + /** + * This method is like `_.xor` except that it accepts `comparator` which is + * invoked to compare elements of `arrays`. The order of result values is + * determined by the order they occur in the arrays. The comparator is invoked + * with two arguments: (arrVal, othVal). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; + * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; + * + * _.xorWith(objects, others, _.isEqual); + * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }] + */ + var xorWith = baseRest(function(arrays) { + var comparator = last(arrays); + comparator = typeof comparator == 'function' ? comparator : undefined; + return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator); + }); + + module.exports = xorWith; + + +/***/ }), +/* 307 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseRest = __webpack_require__(157), + unzip = __webpack_require__(300); + + /** + * Creates an array of grouped elements, the first of which contains the + * first elements of the given arrays, the second of which contains the + * second elements of the given arrays, and so on. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {...Array} [arrays] The arrays to process. + * @returns {Array} Returns the new array of grouped elements. + * @example + * + * _.zip(['a', 'b'], [1, 2], [true, false]); + * // => [['a', 1, true], ['b', 2, false]] + */ + var zip = baseRest(unzip); + + module.exports = zip; + + +/***/ }), +/* 308 */ +/***/ (function(module, exports, __webpack_require__) { + + var assignValue = __webpack_require__(309), + baseZipObject = __webpack_require__(311); + + /** + * This method is like `_.fromPairs` except that it accepts two arrays, + * one of property identifiers and one of corresponding values. + * + * @static + * @memberOf _ + * @since 0.4.0 + * @category Array + * @param {Array} [props=[]] The property identifiers. + * @param {Array} [values=[]] The property values. + * @returns {Object} Returns the new object. + * @example + * + * _.zipObject(['a', 'b'], [1, 2]); + * // => { 'a': 1, 'b': 2 } + */ + function zipObject(props, values) { + return baseZipObject(props || [], values || [], assignValue); + } + + module.exports = zipObject; + + +/***/ }), +/* 309 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseAssignValue = __webpack_require__(310), + eq = __webpack_require__(88); + + /** Used for built-in method references. */ + var objectProto = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty = objectProto.hasOwnProperty; + + /** + * Assigns `value` to `key` of `object` if the existing value is not equivalent + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ + function assignValue(object, key, value) { + var objValue = object[key]; + if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || + (value === undefined && !(key in object))) { + baseAssignValue(object, key, value); + } + } + + module.exports = assignValue; + + +/***/ }), +/* 310 */ +/***/ (function(module, exports, __webpack_require__) { + + var defineProperty = __webpack_require__(164); + + /** + * The base implementation of `assignValue` and `assignMergeValue` without + * value checks. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ + function baseAssignValue(object, key, value) { + if (key == '__proto__' && defineProperty) { + defineProperty(object, key, { + 'configurable': true, + 'enumerable': true, + 'value': value, + 'writable': true + }); + } else { + object[key] = value; + } + } + + module.exports = baseAssignValue; + + +/***/ }), +/* 311 */ +/***/ (function(module, exports) { + + /** + * This base implementation of `_.zipObject` which assigns values using `assignFunc`. + * + * @private + * @param {Array} props The property identifiers. + * @param {Array} values The property values. + * @param {Function} assignFunc The function to assign values. + * @returns {Object} Returns the new object. + */ + function baseZipObject(props, values, assignFunc) { + var index = -1, + length = props.length, + valsLength = values.length, + result = {}; + + while (++index < length) { + var value = index < valsLength ? values[index] : undefined; + assignFunc(result, props[index], value); + } + return result; + } + + module.exports = baseZipObject; + + +/***/ }), +/* 312 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseSet = __webpack_require__(313), + baseZipObject = __webpack_require__(311); + + /** + * This method is like `_.zipObject` except that it supports property paths. + * + * @static + * @memberOf _ + * @since 4.1.0 + * @category Array + * @param {Array} [props=[]] The property identifiers. + * @param {Array} [values=[]] The property values. + * @returns {Object} Returns the new object. + * @example + * + * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]); + * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } } + */ + function zipObjectDeep(props, values) { + return baseZipObject(props || [], values || [], baseSet); + } + + module.exports = zipObjectDeep; + + +/***/ }), +/* 313 */ +/***/ (function(module, exports, __webpack_require__) { + + var assignValue = __webpack_require__(309), + castPath = __webpack_require__(214), + isIndex = __webpack_require__(99), + isObject = __webpack_require__(97), + toKey = __webpack_require__(221); + + /** + * The base implementation of `_.set`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @param {Function} [customizer] The function to customize path creation. + * @returns {Object} Returns `object`. + */ + function baseSet(object, path, value, customizer) { + if (!isObject(object)) { + return object; + } + path = castPath(path, object); + + var index = -1, + length = path.length, + lastIndex = length - 1, + nested = object; + + while (nested != null && ++index < length) { + var key = toKey(path[index]), + newValue = value; + + if (index != lastIndex) { + var objValue = nested[key]; + newValue = customizer ? customizer(objValue, key, nested) : undefined; + if (newValue === undefined) { + newValue = isObject(objValue) + ? objValue + : (isIndex(path[index + 1]) ? [] : {}); + } + } + assignValue(nested, key, newValue); + nested = nested[key]; + } + return object; + } + + module.exports = baseSet; + + +/***/ }), +/* 314 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseRest = __webpack_require__(157), + unzipWith = __webpack_require__(301); + + /** + * This method is like `_.zip` except that it accepts `iteratee` to specify + * how grouped values should be combined. The iteratee is invoked with the + * elements of each group: (...group). + * + * @static + * @memberOf _ + * @since 3.8.0 + * @category Array + * @param {...Array} [arrays] The arrays to process. + * @param {Function} [iteratee=_.identity] The function to combine + * grouped values. + * @returns {Array} Returns the new array of grouped elements. + * @example + * + * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) { + * return a + b + c; + * }); + * // => [111, 222] + */ + var zipWith = baseRest(function(arrays) { + var length = arrays.length, + iteratee = length > 1 ? arrays[length - 1] : undefined; + + iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined; + return unzipWith(arrays, iteratee); + }); + + module.exports = zipWith; + + +/***/ }), +/* 315 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {module.exports = function ( handlerFunction ){ + var viewer = {}, + lastSelectedElement; + + viewer.handle = function ( selectedElement ){ + // Don't display details on a drag event, which will be prevented + if ( d3.event.defaultPrevented ) { + return; + } + + var isSelection = true; + + // Deselection of the focused element + if ( lastSelectedElement === selectedElement ) { + isSelection = false; + } + + if ( handlerFunction instanceof Function ) { + if ( isSelection ) { + handlerFunction(selectedElement); + } else { + handlerFunction(undefined); + } + } + + if ( isSelection ) { + lastSelectedElement = selectedElement; + } else { + lastSelectedElement = undefined; + } + }; + + /** + * Resets the displayed information to its default. + */ + viewer.reset = function (){ + if ( lastSelectedElement ) { + handlerFunction(undefined); + lastSelectedElement = undefined; + } + }; + + return viewer; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), +/* 316 */ +/***/ (function(module, exports, __webpack_require__) { + + var SetOperatorNode = __webpack_require__(20); + + module.exports = function (){ + + var filter = {}, + nodes, + properties, + enabled = false, + filteredNodes, + filteredProperties, + filterTools = __webpack_require__(76)(); + + + /** + * If enabled, all set operators including connected properties are filtered. + * @param untouchedNodes + * @param untouchedProperties + */ + filter.filter = function ( untouchedNodes, untouchedProperties ){ + nodes = untouchedNodes; + properties = untouchedProperties; + + if ( this.enabled() ) { + removeSetOperators(); + } + + filteredNodes = nodes; + filteredProperties = properties; + }; + + function removeSetOperators(){ + var filteredData = filterTools.filterNodesAndTidy(nodes, properties, isNoSetOperator); + + nodes = filteredData.nodes; + properties = filteredData.properties; + } + + function isNoSetOperator( node ){ + return !(node instanceof SetOperatorNode); + } + + filter.enabled = function ( p ){ + if ( !arguments.length ) return enabled; + enabled = p; + return filter; + }; + + + // Functions a filter must have + filter.filteredNodes = function (){ + return filteredNodes; + }; + + filter.filteredProperties = function (){ + return filteredProperties; + }; + + + return filter; + }; + + +/***/ }), +/* 317 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {var SetOperatorNode = __webpack_require__(20); + var OwlThing = __webpack_require__(31); + var OwlNothing = __webpack_require__(30); + var elementTools = __webpack_require__(63)(); + + module.exports = function (){ + + var statistics = {}, + nodeCount, + occurencesOfClassAndDatatypeTypes = {}, + edgeCount, + occurencesOfPropertyTypes = {}, + classCount, + datatypeCount, + datatypePropertyCount, + objectPropertyCount, + propertyCount, + totalIndividualCount, + filteredNodes, + filteredProperties; + + + statistics.filter = function ( classesAndDatatypes, properties ){ + resetStoredData(); + + storeTotalCounts(classesAndDatatypes, properties); + storeClassAndDatatypeCount(classesAndDatatypes); + storePropertyCount(properties); + + storeOccurencesOfTypes(classesAndDatatypes, occurencesOfClassAndDatatypeTypes); + storeOccurencesOfTypes(properties, occurencesOfPropertyTypes); + + storeTotalIndividualCount(classesAndDatatypes); + + filteredNodes = classesAndDatatypes; + filteredProperties = properties; + }; + + function resetStoredData(){ + nodeCount = 0; + edgeCount = 0; + classCount = 0; + datatypeCount = 0; + datatypePropertyCount = 0; + objectPropertyCount = 0; + propertyCount = 0; + totalIndividualCount = 0; + } + + function storeTotalCounts( classesAndDatatypes, properties ){ + nodeCount = classesAndDatatypes.length; + + var seenProperties = __webpack_require__(62)(), i, l, property; + for ( i = 0, l = properties.length; i < l; i++ ) { + property = properties[i]; + if ( !seenProperties.has(property) ) { + edgeCount += 1; + } + + seenProperties.add(property); + if ( property.inverse() ) { + seenProperties.add(property.inverse()); + } + } + } + + function storeClassAndDatatypeCount( classesAndDatatypes ){ + // Each datatype should be counted just a single time + var datatypeSet = d3.set(), + hasThing = false, + hasNothing = false; + classCount = 0; + var old = 0, newcc = 0; + classesAndDatatypes.forEach(function ( node ){ + if ( elementTools.isDatatype(node) ) { + datatypeSet.add(node.defaultLabel()); + } else if ( !(node instanceof SetOperatorNode) ) { + if ( node instanceof OwlThing ) { + hasThing = true; + } else if ( node instanceof OwlNothing ) { + hasNothing = true; + } else { + old = classCount; + var adds = 1 + countElementArray(node.equivalents()); + classCount += adds; + newcc = classCount; + } + } else if ( node instanceof SetOperatorNode ) { + old = classCount; + classCount += 1; + newcc = classCount; + } + }); + + // count things and nothings just a single time + // classCount += hasThing ? 1 : 0; + // classCount += hasNothing ? 1 : 0; + + datatypeCount = datatypeSet.size(); + } + + function storePropertyCount( properties ){ + for ( var i = 0, l = properties.length; i < l; i++ ) { + var property = properties[i]; + var attr; + var result = false; + if ( property.attributes ) { + attr = property.attributes(); + if ( attr && attr.indexOf("datatype") !== -1 ) { + result = true; + } + } + if ( result === true ) { + datatypePropertyCount += getExtendedPropertyCount(property); + } else if ( elementTools.isObjectProperty(property) ) { + objectPropertyCount += getExtendedPropertyCount(property); + } + } + propertyCount = objectPropertyCount + datatypePropertyCount; + } + + function getExtendedPropertyCount( property ){ + // count the property itself + var count = 1; + + // and count properties this property represents + count += countElementArray(property.equivalents()); + count += countElementArray(property.redundantProperties()); + + return count; + } + + function countElementArray( properties ){ + if ( properties ) { + return properties.length; + } + return 0; + } + + function storeOccurencesOfTypes( elements, storage ){ + elements.forEach(function ( element ){ + var type = element.type(), + typeCount = storage[type]; + + if ( typeof typeCount === "undefined" ) { + typeCount = 0; + } else { + typeCount += 1; + } + storage[type] = typeCount; + }); + } + + function storeTotalIndividualCount( nodes ){ + var sawIndividuals = {}; + var totalCount = 0; + for ( var i = 0, l = nodes.length; i < l; i++ ) { + var individuals = nodes[i].individuals(); + + var tempCount = 0; + for ( var iA = 0; iA < individuals.length; iA++ ) { + if ( sawIndividuals[individuals[iA].iri()] === undefined ) { + sawIndividuals[individuals[iA].iri()] = 1; // this iri for that individual is now set to 1 >> seen it + tempCount++; + } + } + totalCount += tempCount; + } + totalIndividualCount = totalCount; + sawIndividuals = {}; // clear the object + + } + + + statistics.nodeCount = function (){ + return nodeCount; + }; + + statistics.occurencesOfClassAndDatatypeTypes = function (){ + return occurencesOfClassAndDatatypeTypes; + }; + + statistics.edgeCount = function (){ + return edgeCount; + }; + + statistics.occurencesOfPropertyTypes = function (){ + return occurencesOfPropertyTypes; + }; + + statistics.classCount = function (){ + return classCount; + }; + + statistics.datatypeCount = function (){ + return datatypeCount; + }; + + statistics.datatypePropertyCount = function (){ + return datatypePropertyCount; + }; + + statistics.objectPropertyCount = function (){ + return objectPropertyCount; + }; + + statistics.propertyCount = function (){ + return propertyCount; + }; + + statistics.totalIndividualCount = function (){ + return totalIndividualCount; + }; + + + // Functions a filter must have + statistics.filteredNodes = function (){ + return filteredNodes; + }; + + statistics.filteredProperties = function (){ + return filteredProperties; + }; + + + return statistics; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), +/* 318 */ +/***/ (function(module, exports, __webpack_require__) { + + var elementTools = __webpack_require__(63)(); + + module.exports = function (){ + + var filter = {}, + nodes, + properties, + enabled = false, + filteredNodes, + filteredProperties; + + + /** + * If enabled subclasses that have only subclass properties are filtered. + * @param untouchedNodes + * @param untouchedProperties + */ + filter.filter = function ( untouchedNodes, untouchedProperties ){ + nodes = untouchedNodes; + properties = untouchedProperties; + + if ( this.enabled() ) { + hideSubclassesWithoutOwnProperties(); + } + + filteredNodes = nodes; + filteredProperties = properties; + }; + + function hideSubclassesWithoutOwnProperties(){ + var unneededProperties = [], + unneededClasses = [], + subclasses = [], + connectedProperties, + subclass, + property, + i, // index, + l; // length + + + for ( i = 0, l = properties.length; i < l; i++ ) { + property = properties[i]; + if ( elementTools.isRdfsSubClassOf(property) ) { + subclasses.push(property.domain()); + } + } + + for ( i = 0, l = subclasses.length; i < l; i++ ) { + subclass = subclasses[i]; + connectedProperties = findRelevantConnectedProperties(subclass, properties); + + // Only remove the node and its properties, if they're all subclassOf properties + if ( areOnlySubclassProperties(connectedProperties) && + doesNotInheritFromMultipleClasses(subclass, connectedProperties) ) { + + unneededProperties = unneededProperties.concat(connectedProperties); + unneededClasses.push(subclass); + } + } + + nodes = removeUnneededElements(nodes, unneededClasses); + properties = removeUnneededElements(properties, unneededProperties); + } + + /** + * Looks recursively for connected properties. Because just subclasses are relevant, + * we just look recursively for their properties. + * + * @param node + * @param allProperties + * @param visitedNodes a visited nodes which is used on recursive invocation + * @returns {Array} + */ + function findRelevantConnectedProperties( node, allProperties, visitedNodes ){ + var connectedProperties = [], + property, + i, + l; + + for ( i = 0, l = allProperties.length; i < l; i++ ) { + property = allProperties[i]; + if ( property.domain() === node || + property.range() === node ) { + + connectedProperties.push(property); + + + /* Special case: SuperClass <-(1) Subclass <-(2) Subclass ->(3) e.g. Datatype + * We need to find the last property recursively. Otherwise, we would remove the subClassOf + * property (1) because we didn't see the datatype property (3). + */ + + // Look only for subclass properties, because these are the relevant properties + if ( elementTools.isRdfsSubClassOf(property) ) { + var domain = property.domain(); + visitedNodes = visitedNodes || __webpack_require__(62)(); + + // If we have the range, there might be a nested property on the domain + if ( node === property.range() && !visitedNodes.has(domain) ) { + visitedNodes.add(domain); + var nestedConnectedProperties = findRelevantConnectedProperties(domain, allProperties, visitedNodes); + connectedProperties = connectedProperties.concat(nestedConnectedProperties); + } + } + } + } + + return connectedProperties; + } + + function areOnlySubclassProperties( connectedProperties ){ + var onlySubclassProperties = true, + property, + i, + l; + + for ( i = 0, l = connectedProperties.length; i < l; i++ ) { + property = connectedProperties[i]; + + if ( !elementTools.isRdfsSubClassOf(property) ) { + onlySubclassProperties = false; + break; + } + } + + return onlySubclassProperties; + } + + function doesNotInheritFromMultipleClasses( subclass, connectedProperties ){ + var superClassCount = 0; + + for ( var i = 0, l = connectedProperties.length; i < l; i++ ) { + var property = connectedProperties[i]; + + if ( property.domain() === subclass ) { + superClassCount += 1; + } + + if ( superClassCount > 1 ) { + return false; + } + } + + return true; + } + + function removeUnneededElements( array, removableElements ){ + var disjoint = [], + element, + i, + l; + + for ( i = 0, l = array.length; i < l; i++ ) { + element = array[i]; + if ( removableElements.indexOf(element) === -1 ) { + disjoint.push(element); + } + } + return disjoint; + } + + filter.enabled = function ( p ){ + if ( !arguments.length ) return enabled; + enabled = p; + return filter; + }; + + + // Functions a filter must have + filter.filteredNodes = function (){ + return filteredNodes; + }; + + filter.filteredProperties = function (){ + return filteredProperties; + }; + + + return filter; + }; + + +/***/ }) +/******/ ]); \ No newline at end of file diff --git a/webvowl/license.txt b/webvowl/license.txt new file mode 100644 index 0000000..6df36db --- /dev/null +++ b/webvowl/license.txt @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014-2019 Vincent Link, Steffen Lohmann, Eduard Marbach, Stefan Negru, Vitalis Wiens + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE.