arelle-release 2.17.1__py3-none-any.whl → 2.37.71__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (893) hide show
  1. arelle/Aspect.py +6 -3
  2. arelle/BetaFeatures.py +3 -0
  3. arelle/Cntlr.py +117 -413
  4. arelle/CntlrCmdLine.py +364 -227
  5. arelle/CntlrQuickBooks.py +4 -2
  6. arelle/CntlrWebMain.py +179 -119
  7. arelle/CntlrWinMain.py +342 -124
  8. arelle/DialogAbout.py +1 -1
  9. arelle/DialogArcroleGroup.py +1 -1
  10. arelle/DialogFind.py +1 -1
  11. arelle/DialogFormulaParameters.py +2 -2
  12. arelle/DialogLanguage.py +45 -36
  13. arelle/DialogNewFactItem.py +1 -1
  14. arelle/DialogOpenArchive.py +30 -34
  15. arelle/DialogPackageManager.py +11 -8
  16. arelle/DialogPluginManager.py +43 -89
  17. arelle/DialogRssWatch.py +2 -2
  18. arelle/DialogURL.py +1 -1
  19. arelle/DialogUserPassword.py +1 -1
  20. arelle/DisclosureSystem.py +69 -1
  21. arelle/ErrorManager.py +321 -0
  22. arelle/FileSource.py +201 -99
  23. arelle/FunctionFn.py +44 -5
  24. arelle/FunctionIxt.py +16 -13
  25. arelle/FunctionUtil.py +1 -1
  26. arelle/FunctionXfi.py +68 -24
  27. arelle/FunctionXs.py +1 -1
  28. arelle/HtmlUtil.py +5 -4
  29. arelle/LeiUtil.py +63 -43
  30. arelle/LinkbaseType.py +94 -0
  31. arelle/LocalViewer.py +8 -2
  32. arelle/Locale.py +239 -79
  33. arelle/ModelDocument.py +180 -48
  34. arelle/ModelDtsObject.py +32 -27
  35. arelle/ModelFormulaObject.py +14 -6
  36. arelle/ModelInstanceObject.py +43 -14
  37. arelle/ModelManager.py +6 -1
  38. arelle/ModelObject.py +12 -8
  39. arelle/ModelObjectFactory.py +18 -2
  40. arelle/ModelRelationshipSet.py +46 -3
  41. arelle/ModelRenderingObject.py +899 -951
  42. arelle/ModelRssItem.py +2 -4
  43. arelle/ModelTestcaseObject.py +41 -4
  44. arelle/ModelValue.py +42 -14
  45. arelle/ModelVersReport.py +1 -1
  46. arelle/ModelXbrl.py +133 -273
  47. arelle/PackageManager.py +202 -176
  48. arelle/PluginManager.py +551 -239
  49. arelle/PluginUtils.py +54 -0
  50. arelle/PrototypeInstanceObject.py +53 -12
  51. arelle/PythonUtil.py +166 -25
  52. arelle/RuntimeOptions.py +32 -18
  53. arelle/SocketUtils.py +3 -0
  54. arelle/SystemInfo.py +1 -1
  55. arelle/TkTableWrapper.py +33 -5
  56. arelle/UITkTable.py +27 -21
  57. arelle/Updater.py +7 -3
  58. arelle/UrlUtil.py +6 -2
  59. arelle/Validate.py +596 -402
  60. arelle/ValidateDuplicateFacts.py +584 -0
  61. arelle/ValidateFileSource.py +38 -0
  62. arelle/ValidateFilingText.py +46 -29
  63. arelle/ValidateInfoset.py +104 -32
  64. arelle/ValidateUtr.py +31 -4
  65. arelle/ValidateXbrl.py +144 -120
  66. arelle/ValidateXbrlCalcs.py +51 -66
  67. arelle/ValidateXbrlDTS.py +98 -29
  68. arelle/Version.py +2 -7
  69. arelle/ViewFile.py +2 -0
  70. arelle/ViewFileDTS.py +7 -2
  71. arelle/ViewFileFactList.py +1 -1
  72. arelle/ViewFileFactTable.py +4 -4
  73. arelle/ViewFileRelationshipSet.py +36 -19
  74. arelle/ViewFileRenderedGrid.py +164 -753
  75. arelle/ViewFileRenderedLayout.py +174 -0
  76. arelle/ViewFileRenderedStructure.py +108 -0
  77. arelle/ViewWinDTS.py +4 -1
  78. arelle/ViewWinFactList.py +1 -1
  79. arelle/ViewWinFactTable.py +1 -1
  80. arelle/ViewWinRelationshipSet.py +14 -8
  81. arelle/ViewWinRenderedGrid.py +397 -287
  82. arelle/ViewWinRssFeed.py +4 -0
  83. arelle/ViewWinTree.py +15 -9
  84. arelle/ViewWinXml.py +1 -1
  85. arelle/WebCache.py +510 -272
  86. arelle/XbrlConst.py +202 -196
  87. arelle/XbrlUtil.py +2 -1
  88. arelle/XhtmlValidate.py +9 -23
  89. arelle/XmlUtil.py +24 -19
  90. arelle/XmlValidate.py +95 -67
  91. arelle/XmlValidateParticles.py +4 -4
  92. arelle/_version.py +33 -3
  93. arelle/api/Session.py +183 -0
  94. arelle/config/creationSoftwareNames.json +24 -10
  95. arelle/config/disclosuresystems.xml +1 -1
  96. arelle/config/disclosuresystems.xsd +3 -0
  97. arelle/config/sbr-text-formatting.xsd +737 -0
  98. arelle/conformance/CSVTestcaseLoader.py +102 -0
  99. arelle/formula/FactAspectsCache.py +10 -4
  100. arelle/formula/ValidateFormula.py +82 -194
  101. arelle/formula/XPathContext.py +42 -28
  102. arelle/formula/XPathParser.py +15 -9
  103. arelle/locale/ar_EG/LC_MESSAGES/ar_EG.po +3 -4
  104. arelle/locale/messages.pot +1 -2
  105. arelle/locale/ru/LC_MESSAGES/ru.po +2 -2
  106. arelle/logging/formatters/LogFormatter.py +47 -0
  107. arelle/logging/handlers/LogHandlerWithXml.py +94 -0
  108. arelle/logging/handlers/LogToBufferHandler.py +20 -0
  109. arelle/logging/handlers/LogToPrintHandler.py +41 -0
  110. arelle/logging/handlers/LogToXmlHandler.py +244 -0
  111. arelle/logging/handlers/StructuredMessageLogHandler.py +74 -0
  112. arelle/model/CommentBase.py +3 -0
  113. arelle/model/ElementBase.py +3 -0
  114. arelle/model/PIBase.py +3 -0
  115. arelle/model/__init__.py +3 -0
  116. arelle/oim/Load.py +2869 -0
  117. arelle/oim/Validate.py +155 -0
  118. arelle/oim/xml/Save.py +21 -0
  119. arelle/packages/PackageConst.py +7 -0
  120. arelle/packages/PackageType.py +13 -0
  121. arelle/packages/PackageUtils.py +22 -0
  122. arelle/packages/PackageValidation.py +200 -0
  123. arelle/packages/report/DetectReportPackage.py +13 -0
  124. arelle/packages/report/ReportPackage.py +265 -0
  125. arelle/packages/report/ReportPackageConst.py +79 -0
  126. arelle/packages/report/ReportPackageValidator.py +207 -0
  127. arelle/plugin/EdgarRendererAllReports.py +12 -12
  128. arelle/plugin/OimTaxonomy/ModelValueMore.py +15 -0
  129. arelle/plugin/OimTaxonomy/ValidateDTS.py +484 -0
  130. arelle/plugin/OimTaxonomy/ViewXbrlTxmyObj.py +239 -0
  131. arelle/plugin/OimTaxonomy/XbrlAbstract.py +16 -0
  132. arelle/plugin/OimTaxonomy/XbrlConcept.py +68 -0
  133. arelle/plugin/OimTaxonomy/XbrlConst.py +261 -0
  134. arelle/plugin/OimTaxonomy/XbrlCube.py +91 -0
  135. arelle/plugin/OimTaxonomy/XbrlDimension.py +38 -0
  136. arelle/plugin/OimTaxonomy/XbrlDts.py +152 -0
  137. arelle/plugin/OimTaxonomy/XbrlEntity.py +16 -0
  138. arelle/plugin/OimTaxonomy/XbrlGroup.py +22 -0
  139. arelle/plugin/OimTaxonomy/XbrlImportedTaxonomy.py +22 -0
  140. arelle/plugin/OimTaxonomy/XbrlLabel.py +31 -0
  141. arelle/plugin/OimTaxonomy/XbrlNetwork.py +100 -0
  142. arelle/plugin/OimTaxonomy/XbrlProperty.py +28 -0
  143. arelle/plugin/OimTaxonomy/XbrlReference.py +33 -0
  144. arelle/plugin/OimTaxonomy/XbrlReport.py +24 -0
  145. arelle/plugin/OimTaxonomy/XbrlTableTemplate.py +35 -0
  146. arelle/plugin/OimTaxonomy/XbrlTaxonomy.py +93 -0
  147. arelle/plugin/OimTaxonomy/XbrlTaxonomyObject.py +154 -0
  148. arelle/plugin/OimTaxonomy/XbrlTransform.py +17 -0
  149. arelle/plugin/OimTaxonomy/XbrlTypes.py +23 -0
  150. arelle/plugin/OimTaxonomy/XbrlUnit.py +17 -0
  151. arelle/plugin/OimTaxonomy/__init__.py +1037 -0
  152. arelle/plugin/OimTaxonomy/resources/iso4217.json +4479 -0
  153. arelle/plugin/OimTaxonomy/resources/oim-taxonomy-schema.json +935 -0
  154. arelle/plugin/OimTaxonomy/resources/ref.json +333 -0
  155. arelle/plugin/OimTaxonomy/resources/transform-types.json +2481 -0
  156. arelle/plugin/OimTaxonomy/resources/types.json +727 -0
  157. arelle/plugin/OimTaxonomy/resources/utr.json +3046 -0
  158. arelle/plugin/OimTaxonomy/resources/xbrlSpec.json +1082 -0
  159. arelle/plugin/formulaLoader.py +3 -3
  160. arelle/plugin/formulaSaver.py +4 -4
  161. arelle/plugin/inlineXbrlDocumentSet.py +331 -102
  162. arelle/plugin/internet/proxyNTLM/HTTPNtlmAuthHandler.py +1 -1
  163. arelle/plugin/loadFromExcel.py +13 -10
  164. arelle/plugin/loadFromOIM.py +16 -3096
  165. arelle/plugin/logging/saveMessages.py +1 -1
  166. arelle/plugin/saveHtmlEBAtables.py +293 -213
  167. arelle/plugin/saveLoadableOIM.py +652 -361
  168. arelle/plugin/saveOIMTaxonomy.py +311 -0
  169. arelle/plugin/streamingExtensions.py +1 -1
  170. arelle/plugin/systemInfo.py +46 -0
  171. arelle/plugin/transforms/tester.py +4 -4
  172. arelle/plugin/validate/CIPC/Const.py +18 -0
  173. arelle/plugin/validate/CIPC/__init__.py +34 -13
  174. arelle/plugin/validate/DBA/DisclosureSystems.py +12 -0
  175. arelle/plugin/validate/DBA/PluginValidationDataExtension.py +165 -0
  176. arelle/plugin/validate/DBA/ValidationPluginExtension.py +545 -0
  177. arelle/plugin/validate/DBA/__init__.py +49 -0
  178. arelle/plugin/validate/DBA/resources/config.xml +21 -0
  179. arelle/plugin/validate/DBA/rules/__init__.py +323 -0
  180. arelle/plugin/validate/DBA/rules/fr.py +1377 -0
  181. arelle/plugin/validate/DBA/rules/tc.py +45 -0
  182. arelle/plugin/validate/DBA/rules/th.py +172 -0
  183. arelle/plugin/validate/DBA/rules/tm.py +351 -0
  184. arelle/plugin/validate/DBA/rules/tr.py +373 -0
  185. arelle/plugin/validate/EBA/__init__.py +11 -12
  186. arelle/plugin/validate/EDINET/Constants.py +208 -0
  187. arelle/plugin/validate/EDINET/ContextRequirement.py +58 -0
  188. arelle/plugin/validate/EDINET/ControllerPluginData.py +298 -0
  189. arelle/plugin/validate/EDINET/CoverItemRequirements.py +42 -0
  190. arelle/plugin/validate/EDINET/DeiRequirements.py +118 -0
  191. arelle/plugin/validate/EDINET/DisclosureSystems.py +1 -0
  192. arelle/plugin/validate/EDINET/FilingFormat.py +275 -0
  193. arelle/plugin/validate/EDINET/FormType.py +134 -0
  194. arelle/plugin/validate/EDINET/ManifestInstance.py +236 -0
  195. arelle/plugin/validate/EDINET/PluginValidationDataExtension.py +640 -0
  196. arelle/plugin/validate/EDINET/ReportFolderType.py +162 -0
  197. arelle/plugin/validate/EDINET/Statement.py +139 -0
  198. arelle/plugin/validate/EDINET/TableOfContentsBuilder.py +493 -0
  199. arelle/plugin/validate/EDINET/UploadContents.py +48 -0
  200. arelle/plugin/validate/EDINET/ValidationPluginExtension.py +64 -0
  201. arelle/plugin/validate/EDINET/__init__.py +109 -0
  202. arelle/plugin/validate/EDINET/resources/config.xml +22 -0
  203. arelle/plugin/validate/EDINET/resources/cover-item-requirements.json +793 -0
  204. arelle/plugin/validate/EDINET/resources/dei-requirements.csv +27 -0
  205. arelle/plugin/validate/EDINET/resources/edinet-taxonomies.xml +62 -0
  206. arelle/plugin/validate/EDINET/rules/contexts.py +547 -0
  207. arelle/plugin/validate/EDINET/rules/edinet.py +1991 -0
  208. arelle/plugin/validate/EDINET/rules/frta.py +301 -0
  209. arelle/plugin/validate/EDINET/rules/gfm.py +2394 -0
  210. arelle/plugin/validate/EDINET/rules/manifests.py +88 -0
  211. arelle/plugin/validate/EDINET/rules/upload.py +1370 -0
  212. arelle/plugin/validate/ESEF/Const.py +16 -75
  213. arelle/plugin/validate/ESEF/Dimensions.py +2 -2
  214. arelle/plugin/validate/ESEF/ESEF_2021/DTS.py +6 -1
  215. arelle/plugin/validate/ESEF/ESEF_2021/Image.py +7 -4
  216. arelle/plugin/validate/ESEF/ESEF_2021/ValidateXbrlFinally.py +80 -57
  217. arelle/plugin/validate/ESEF/ESEF_Current/DTS.py +60 -22
  218. arelle/plugin/validate/ESEF/ESEF_Current/ValidateXbrlFinally.py +272 -133
  219. arelle/plugin/validate/ESEF/Util.py +5 -19
  220. arelle/plugin/validate/ESEF/__init__.py +61 -46
  221. arelle/plugin/validate/ESEF/resources/authority-validations.json +120 -10
  222. arelle/plugin/validate/ESEF/resources/config.xml +44 -3
  223. arelle/plugin/validate/FERC/__init__.py +31 -18
  224. arelle/plugin/validate/FERC/config.xml +18 -18
  225. arelle/plugin/validate/NL/DisclosureSystems.py +19 -3
  226. arelle/plugin/validate/NL/PluginValidationDataExtension.py +710 -7
  227. arelle/plugin/validate/NL/ValidationPluginExtension.py +117 -12
  228. arelle/plugin/validate/NL/__init__.py +21 -10
  229. arelle/plugin/validate/NL/resources/config.xml +27 -6
  230. arelle/plugin/validate/NL/rules/br_kvk.py +81 -21
  231. arelle/plugin/validate/NL/rules/fg_nl.py +292 -0
  232. arelle/plugin/validate/NL/rules/fr_kvk.py +60 -7
  233. arelle/plugin/validate/NL/rules/fr_nl.py +705 -24
  234. arelle/plugin/validate/NL/rules/nl_kvk.py +2182 -0
  235. arelle/plugin/validate/ROS/DisclosureSystems.py +1 -0
  236. arelle/plugin/validate/ROS/PluginValidationDataExtension.py +109 -0
  237. arelle/plugin/validate/ROS/ValidationPluginExtension.py +27 -0
  238. arelle/plugin/validate/ROS/__init__.py +28 -341
  239. arelle/plugin/validate/ROS/resources/config.xml +20 -0
  240. arelle/plugin/validate/ROS/rules/__init__.py +56 -0
  241. arelle/plugin/validate/ROS/rules/ros.py +393 -0
  242. arelle/plugin/validate/UK/ValidateUK.py +1372 -0
  243. arelle/plugin/validate/{HMRC → UK}/__init__.py +195 -189
  244. arelle/plugin/validate/{HMRC → UK}/config.xml +1 -1
  245. arelle/plugin/xbrlDB/SqlDb.py +1 -1
  246. arelle/plugin/xbrlDB/XbrlOpenSqlDB.py +5 -5
  247. arelle/plugin/xbrlDB/XbrlPublicPostgresDB.py +1 -1
  248. arelle/plugin/xbrlDB/XbrlSemanticJsonDB.py +1 -1
  249. arelle/plugin/xbrlDB/XbrlSemanticRdfDB.py +1 -1
  250. arelle/plugin/xbrlDB/__init__.py +4 -1
  251. arelle/{RenderingEvaluator.py → rendering/RenderingEvaluator.py} +120 -99
  252. arelle/rendering/RenderingLayout.py +476 -0
  253. arelle/rendering/RenderingResolution.py +814 -0
  254. arelle/resources/cache/http/www.eurofiling.info/eu/fr/xbrl/ext/filing-indicators.xsd +20 -0
  255. arelle/resources/cache/http/www.w3.org/2001/03/xml.xsd +117 -0
  256. arelle/resources/cache/http/www.w3.org/2001/XMLSchema.xsd +2534 -0
  257. arelle/resources/cache/http/www.w3.org/2001/xml.xsd +287 -0
  258. arelle/resources/cache/http/www.xbrl.org/2003/xbrl-instance-2003-12-31.xsd +779 -0
  259. arelle/resources/cache/http/www.xbrl.org/2003/xbrl-linkbase-2003-12-31.xsd +486 -0
  260. arelle/resources/cache/http/www.xbrl.org/2003/xl-2003-12-31.xsd +251 -0
  261. arelle/resources/cache/http/www.xbrl.org/2003/xlink-2003-12-31.xsd +121 -0
  262. arelle/resources/cache/http/www.xbrl.org/2004/ref-2004-08-10.xsd +129 -0
  263. arelle/resources/cache/http/www.xbrl.org/2005/xbrldt-2005.xsd +53 -0
  264. arelle/resources/cache/http/www.xbrl.org/2006/ref-2006-02-27.xsd +120 -0
  265. arelle/resources/cache/http/www.xbrl.org/2006/xbrldi-2006.xsd +41 -0
  266. arelle/resources/cache/http/www.xbrl.org/2008/boolean-filter.xsd +51 -0
  267. arelle/resources/cache/http/www.xbrl.org/2008/concept-filter.xsd +127 -0
  268. arelle/resources/cache/http/www.xbrl.org/2008/conformance.xsd +116 -0
  269. arelle/resources/cache/http/www.xbrl.org/2008/conformanceFunction.xsd +51 -0
  270. arelle/resources/cache/http/www.xbrl.org/2008/consistency-assertion.xsd +66 -0
  271. arelle/resources/cache/http/www.xbrl.org/2008/dimension-filter.xsd +86 -0
  272. arelle/resources/cache/http/www.xbrl.org/2008/entity-filter.xsd +92 -0
  273. arelle/resources/cache/http/www.xbrl.org/2008/existence-assertion.xsd +44 -0
  274. arelle/resources/cache/http/www.xbrl.org/2008/formula.xsd +261 -0
  275. arelle/resources/cache/http/www.xbrl.org/2008/function.xsd +90 -0
  276. arelle/resources/cache/http/www.xbrl.org/2008/general-filter.xsd +38 -0
  277. arelle/resources/cache/http/www.xbrl.org/2008/generic-label.xsd +80 -0
  278. arelle/resources/cache/http/www.xbrl.org/2008/generic-link.xsd +81 -0
  279. arelle/resources/cache/http/www.xbrl.org/2008/generic-reference.xsd +63 -0
  280. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xbrl/xbrl-instance-2003-12-31-ixmod.xsd +788 -0
  281. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xbrl/xbrl-linkbase-2003-12-31-ixmod.xsd +488 -0
  282. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xbrl/xl-2003-12-31.xsd +248 -0
  283. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xbrl/xlink-2003-12-31.xsd +117 -0
  284. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xframes-1.xsd +166 -0
  285. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-applet-1.xsd +66 -0
  286. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-attribs-1.xsd +72 -0
  287. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-base-1.xsd +36 -0
  288. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-basic-form-1.xsd +195 -0
  289. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-basic-table-1.xsd +169 -0
  290. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-basic10-model-1.xsd +376 -0
  291. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-basic10-module-redefines-1.xsd +61 -0
  292. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-basic10-modules-1.xsd +259 -0
  293. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-basic10.xsd +98 -0
  294. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-bdo-1.xsd +78 -0
  295. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-blkphras-1.xsd +161 -0
  296. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-blkpres-1.xsd +37 -0
  297. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-blkstruct-1.xsd +49 -0
  298. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-charent-1.xsd +38 -0
  299. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-copyright-1.xsd +29 -0
  300. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-csismap-1.xsd +96 -0
  301. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-datatypes-1.xsd +128 -0
  302. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-edit-1.xsd +39 -0
  303. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-events-1.xsd +130 -0
  304. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-form-1.xsd +326 -0
  305. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-frames-1.xsd +113 -0
  306. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-framework-1.xsd +66 -0
  307. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-hypertext-1.xsd +47 -0
  308. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-iframe-1.xsd +68 -0
  309. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-image-1.xsd +45 -0
  310. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-inlphras-1.xsd +163 -0
  311. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-inlpres-1.xsd +39 -0
  312. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-inlstruct-1.xsd +50 -0
  313. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-inlstyle-1.xsd +27 -0
  314. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-legacy-1.xsd +97 -0
  315. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-link-1.xsd +45 -0
  316. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-list-1.xsd +99 -0
  317. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-meta-1.xsd +42 -0
  318. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-misc-1.xsd +441 -0
  319. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-nameident-1.xsd +63 -0
  320. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-notations-1.xsd +69 -0
  321. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-object-1.xsd +76 -0
  322. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-param-1.xsd +51 -0
  323. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-pres-1.xsd +51 -0
  324. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-ruby-1.xsd +171 -0
  325. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-ruby-basic-1.xsd +89 -0
  326. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-script-1.xsd +70 -0
  327. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-ssismap-1.xsd +43 -0
  328. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-struct-1.xsd +112 -0
  329. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-style-1.xsd +52 -0
  330. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-table-1.xsd +272 -0
  331. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-target-1.xsd +53 -0
  332. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-text-1.xsd +67 -0
  333. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml11-model-1.xsd +677 -0
  334. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml11-module-redefines-1.xsd +335 -0
  335. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml11-modules-1.xsd +528 -0
  336. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml11.xsd +104 -0
  337. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml2.xsd +21 -0
  338. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xml-events-1.xsd +73 -0
  339. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xml-events-2.xsd +74 -0
  340. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xml-events-attribs-1.xsd +73 -0
  341. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xml-events-attribs-2.xsd +75 -0
  342. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xml-events-copyright-1.xsd +34 -0
  343. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xml-events-copyright-2.xsd +34 -0
  344. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xml-handlers-2.xsd +98 -0
  345. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml-inlinexbrl-1_0-definitions.xsd +225 -0
  346. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml-inlinexbrl-1_0-model.xsd +681 -0
  347. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml-inlinexbrl-1_0-modules.xsd +535 -0
  348. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml-inlinexbrl-1_0.xsd +40 -0
  349. arelle/resources/cache/http/www.xbrl.org/2008/match-filter.xsd +94 -0
  350. arelle/resources/cache/http/www.xbrl.org/2008/period-filter.xsd +86 -0
  351. arelle/resources/cache/http/www.xbrl.org/2008/registry.xsd +145 -0
  352. arelle/resources/cache/http/www.xbrl.org/2008/relative-filter.xsd +38 -0
  353. arelle/resources/cache/http/www.xbrl.org/2008/segment-scenario-filter.xsd +41 -0
  354. arelle/resources/cache/http/www.xbrl.org/2008/tuple-filter.xsd +83 -0
  355. arelle/resources/cache/http/www.xbrl.org/2008/unit-filter.xsd +58 -0
  356. arelle/resources/cache/http/www.xbrl.org/2008/validation.xsd +78 -0
  357. arelle/resources/cache/http/www.xbrl.org/2008/value-assertion.xsd +43 -0
  358. arelle/resources/cache/http/www.xbrl.org/2008/value-filter.xsd +43 -0
  359. arelle/resources/cache/http/www.xbrl.org/2008/variable.xsd +240 -0
  360. arelle/resources/cache/http/www.xbrl.org/2010/aspect-cover-filter.xsd +67 -0
  361. arelle/resources/cache/http/www.xbrl.org/2010/concept-relation-filter.xsd +108 -0
  362. arelle/resources/cache/http/www.xbrl.org/2010/custom-function-implementation.xsd +71 -0
  363. arelle/resources/cache/http/www.xbrl.org/2010/generic-message.xsd +68 -0
  364. arelle/resources/cache/http/www.xbrl.org/2010/validation-message.xsd +50 -0
  365. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xbrl/xbrl-instance-2003-12-31-ixmod.xsd +788 -0
  366. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xbrl/xbrl-linkbase-2003-12-31-ixmod.xsd +488 -0
  367. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xbrl/xl-2003-12-31.xsd +248 -0
  368. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xbrl/xlink-2003-12-31.xsd +117 -0
  369. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xframes-1.xsd +166 -0
  370. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-applet-1.xsd +66 -0
  371. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-attribs-1.xsd +72 -0
  372. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-base-1.xsd +36 -0
  373. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-basic-form-1.xsd +195 -0
  374. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-basic-table-1.xsd +169 -0
  375. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-basic10-model-1.xsd +376 -0
  376. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-basic10-module-redefines-1.xsd +61 -0
  377. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-basic10-modules-1.xsd +259 -0
  378. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-basic10.xsd +98 -0
  379. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-bdo-1.xsd +78 -0
  380. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-blkphras-1.xsd +161 -0
  381. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-blkpres-1.xsd +37 -0
  382. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-blkstruct-1.xsd +49 -0
  383. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-charent-1.xsd +38 -0
  384. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-copyright-1.xsd +29 -0
  385. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-csismap-1.xsd +96 -0
  386. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-datatypes-1.xsd +128 -0
  387. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-edit-1.xsd +39 -0
  388. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-events-1.xsd +130 -0
  389. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-form-1.xsd +326 -0
  390. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-frames-1.xsd +113 -0
  391. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-framework-1.xsd +66 -0
  392. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-hypertext-1.xsd +47 -0
  393. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-iframe-1.xsd +68 -0
  394. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-image-1.xsd +45 -0
  395. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-inlphras-1.xsd +163 -0
  396. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-inlpres-1.xsd +39 -0
  397. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-inlstruct-1.xsd +50 -0
  398. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-inlstyle-1.xsd +27 -0
  399. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-legacy-1.xsd +97 -0
  400. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-link-1.xsd +45 -0
  401. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-list-1.xsd +99 -0
  402. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-meta-1.xsd +42 -0
  403. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-misc-1.xsd +441 -0
  404. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-nameident-1.xsd +63 -0
  405. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-notations-1.xsd +69 -0
  406. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-object-1.xsd +76 -0
  407. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-param-1.xsd +51 -0
  408. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-pres-1.xsd +51 -0
  409. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-ruby-1.xsd +171 -0
  410. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-ruby-basic-1.xsd +89 -0
  411. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-script-1.xsd +70 -0
  412. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-ssismap-1.xsd +43 -0
  413. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-struct-1.xsd +112 -0
  414. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-style-1.xsd +52 -0
  415. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-table-1.xsd +272 -0
  416. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-target-1.xsd +53 -0
  417. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-text-1.xsd +67 -0
  418. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml11-model-1.xsd +677 -0
  419. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml11-module-redefines-1.xsd +335 -0
  420. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml11-modules-1.xsd +528 -0
  421. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml11.xsd +104 -0
  422. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml2.xsd +21 -0
  423. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xml-events-1.xsd +73 -0
  424. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xml-events-2.xsd +74 -0
  425. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xml-events-attribs-1.xsd +73 -0
  426. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xml-events-attribs-2.xsd +75 -0
  427. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xml-events-copyright-1.xsd +34 -0
  428. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xml-events-copyright-2.xsd +34 -0
  429. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xml-handlers-2.xsd +98 -0
  430. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml-inlinexbrl-1_1-definitions.xsd +252 -0
  431. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml-inlinexbrl-1_1-model.xsd +681 -0
  432. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml-inlinexbrl-1_1-modules.xsd +535 -0
  433. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml-inlinexbrl-1_1.xsd +40 -0
  434. arelle/resources/cache/http/www.xbrl.org/2013/match-filter.xsd +94 -0
  435. arelle/resources/cache/http/www.xbrl.org/2013/preferred-label.xsd +12 -0
  436. arelle/resources/cache/http/www.xbrl.org/2013/versioning-base.xsd +142 -0
  437. arelle/resources/cache/http/www.xbrl.org/2013/versioning-concept-details.xsd +143 -0
  438. arelle/resources/cache/http/www.xbrl.org/2013/versioning-concept-use.xsd +64 -0
  439. arelle/resources/cache/http/www.xbrl.org/2013/versioning-dimensions.xsd +162 -0
  440. arelle/resources/cache/http/www.xbrl.org/2014/extensible-enumerations.xsd +27 -0
  441. arelle/resources/cache/http/www.xbrl.org/2014/table.xsd +356 -0
  442. arelle/resources/cache/http/www.xbrl.org/2014/tablemodel.xsd +156 -0
  443. arelle/resources/cache/http/www.xbrl.org/2016/assertion-severity.xsd +29 -0
  444. arelle/resources/cache/http/www.xbrl.org/2016/severities.xml +21 -0
  445. arelle/resources/cache/http/www.xbrl.org/2016/taxonomy-package-catalog.xsd +38 -0
  446. arelle/resources/cache/http/www.xbrl.org/2016/taxonomy-package.xsd +154 -0
  447. arelle/resources/cache/http/www.xbrl.org/2022/assertion-severity.xsd +43 -0
  448. arelle/resources/cache/http/www.xbrl.org/2022/severities.xml +21 -0
  449. arelle/resources/cache/http/www.xbrl.org/dtr/type/nonNumeric-2009-12-16.xsd +76 -0
  450. arelle/resources/cache/http/www.xbrl.org/dtr/type/numeric-2009-12-16.xsd +78 -0
  451. arelle/resources/cache/http/www.xbrl.org/lrr/arcrole/accounting-arcrole-2023-01-04.xsd +39 -0
  452. arelle/resources/cache/http/www.xbrl.org/lrr/arcrole/deprecated-2009-12-16.xsd +29 -0
  453. arelle/resources/cache/http/www.xbrl.org/lrr/arcrole/esma-arcrole-2018-11-21.xsd +14 -0
  454. arelle/resources/cache/http/www.xbrl.org/lrr/arcrole/factExplanatory-2009-12-16.xsd +13 -0
  455. arelle/resources/cache/http/www.xbrl.org/lrr/arcrole/jpfr-arcrole-2007-11-07.xsd +27 -0
  456. arelle/resources/cache/http/www.xbrl.org/lrr/arcrole/parent-child-2013-09-19.xsd +12 -0
  457. arelle/resources/cache/http/www.xbrl.org/lrr/role/deprecated-2009-12-16.xsd +17 -0
  458. arelle/resources/cache/http/www.xbrl.org/lrr/role/jpfr-role-2007-11-07.xsd +47 -0
  459. arelle/resources/cache/http/www.xbrl.org/lrr/role/negated-2008-03-31.xsd +30 -0
  460. arelle/resources/cache/http/www.xbrl.org/lrr/role/negated-2009-12-16.xsd +33 -0
  461. arelle/resources/cache/http/www.xbrl.org/lrr/role/negative-2009-12-16.xsd +25 -0
  462. arelle/resources/cache/http/www.xbrl.org/lrr/role/net-2009-12-16.xsd +13 -0
  463. arelle/resources/cache/http/www.xbrl.org/lrr/role/positive-2009-12-16.xsd +25 -0
  464. arelle/resources/cache/http/www.xbrl.org/lrr/role/property-2022-09-28.xsd +15 -0
  465. arelle/resources/cache/http/www.xbrl.org/lrr/role/reference-2009-12-16.xsd +21 -0
  466. arelle/resources/cache/http/www.xbrl.org/lrr/role/restated-2006-02-21.xsd +19 -0
  467. arelle/resources/cache/http/www.xbrl.org/utr/2012-01-30/utr.xml +4543 -0
  468. arelle/resources/cache/http/www.xbrl.org/utr/2012-10-31/utr.xml +4510 -0
  469. arelle/resources/cache/http/www.xbrl.org/utr/2012-11-30/utr.xml +4567 -0
  470. arelle/resources/cache/http/www.xbrl.org/utr/2013-02-28/utr.xml +5180 -0
  471. arelle/resources/cache/http/www.xbrl.org/utr/2013-05-17/utr.xml +5349 -0
  472. arelle/resources/cache/http/www.xbrl.org/utr/2016-08-10/utr.xml +5363 -0
  473. arelle/resources/cache/http/www.xbrl.org/utr/2017-07-12/utr.xml +6164 -0
  474. arelle/resources/cache/http/www.xbrl.org/utr/2021-02-16/utr.xml +6370 -0
  475. arelle/resources/cache/http/www.xbrl.org/utr/2021-12-08/utr.xml +6493 -0
  476. arelle/resources/cache/http/www.xbrl.org/utr/2022-02-16/utr.xml +6551 -0
  477. arelle/resources/cache/http/www.xbrl.org/utr/2022-07-20/utr.xml +6638 -0
  478. arelle/resources/cache/http/www.xbrl.org/utr/2023-12-20/utr.xml +6680 -0
  479. arelle/resources/cache/http/www.xbrl.org/utr/2024-01-31/utr.xml +6680 -0
  480. arelle/resources/cache/http/www.xbrl.org/utr/2024-10-22/utr.xml +6693 -0
  481. arelle/resources/cache/http/www.xbrl.org/utr/utr.xml +6693 -0
  482. arelle/resources/cache/https/www.xbrl.org/2005/conformance.xsd +87 -0
  483. arelle/resources/cache/https/www.xbrl.org/2020/extensible-enumerations-2.0.xsd +51 -0
  484. arelle/resources/cache/https/www.xbrl.org/2023/calculation-1.1.xsd +27 -0
  485. arelle/resources/cache/https/www.xbrl.org/dtr/type/2020-01-21/types.xsd +812 -0
  486. arelle/resources/cache/https/www.xbrl.org/dtr/type/2022-03-31/types.xsd +847 -0
  487. arelle/resources/cache/https/www.xbrl.org/dtr/type/2024-01-31/types.xsd +897 -0
  488. arelle/resources/cache/https/www.xbrl.org/taxonomy/int/filing-indicators/REC/2021-02-03/filing-indicators-def.xml +68 -0
  489. arelle/resources/cache/https/www.xbrl.org/taxonomy/int/filing-indicators/REC/2021-02-03/filing-indicators-label.xml +84 -0
  490. arelle/resources/cache/https/www.xbrl.org/taxonomy/int/filing-indicators/REC/2021-02-03/filing-indicators.xsd +67 -0
  491. arelle/resources/libs/Tktable2.11/linux-x86_64/README.txt +149 -0
  492. arelle/resources/libs/Tktable2.11/linux-x86_64/html/tkTable.html +2039 -0
  493. arelle/resources/libs/Tktable2.11/linux-x86_64/libTktable2.11.so +0 -0
  494. arelle/resources/libs/Tktable2.11/linux-x86_64/license.txt +51 -0
  495. arelle/resources/libs/Tktable2.11/linux-x86_64/pkgIndex.tcl +3 -0
  496. arelle/resources/libs/Tktable2.11/linux-x86_64/tkTable.tcl +825 -0
  497. arelle/resources/libs/Tktable2.11/linux-x86_64/tktable.py +674 -0
  498. arelle/resources/libs/Tktable2.11/macos-arm64/README.txt +149 -0
  499. arelle/resources/libs/Tktable2.11/macos-arm64/html/tkTable.html +2039 -0
  500. arelle/resources/libs/Tktable2.11/macos-arm64/libTktable2.11.dylib +0 -0
  501. arelle/resources/libs/Tktable2.11/macos-arm64/license.txt +51 -0
  502. arelle/resources/libs/Tktable2.11/macos-arm64/pkgIndex.tcl +2 -0
  503. arelle/resources/libs/Tktable2.11/macos-arm64/tkTable.tcl +825 -0
  504. arelle/resources/libs/Tktable2.11/macos-arm64/tktable.py +674 -0
  505. arelle/resources/libs/Tktable2.11/macos-x86_64/README.txt +149 -0
  506. arelle/resources/libs/Tktable2.11/macos-x86_64/html/tkTable.html +2039 -0
  507. arelle/resources/libs/Tktable2.11/macos-x86_64/libTktable2.11.dylib +0 -0
  508. arelle/resources/libs/Tktable2.11/macos-x86_64/license.txt +51 -0
  509. arelle/resources/libs/Tktable2.11/macos-x86_64/pkgIndex.tcl +2 -0
  510. arelle/resources/libs/Tktable2.11/macos-x86_64/tkTable.tcl +825 -0
  511. arelle/resources/libs/Tktable2.11/macos-x86_64/tktable.py +674 -0
  512. arelle/resources/libs/Tktable2.11/win-x86_64/Tktable.dll +0 -0
  513. arelle/resources/libs/Tktable2.11/win-x86_64/pkgIndex.tcl +2 -0
  514. arelle/resources/libs/Tktable2.11/win-x86_64/tkTable.tcl +825 -0
  515. arelle/typing.py +9 -4
  516. arelle/utils/Contexts.py +38 -0
  517. arelle/utils/EntryPointDetection.py +139 -0
  518. arelle/utils/Equivalence.py +22 -0
  519. arelle/utils/{validate/PluginValidationData.py → PluginData.py} +5 -2
  520. arelle/utils/PluginHooks.py +256 -5
  521. arelle/utils/Units.py +36 -0
  522. arelle/utils/validate/Decorator.py +5 -3
  523. arelle/utils/validate/DetectScriptsInXhtml.py +99 -0
  524. arelle/utils/validate/ESEFImage.py +283 -0
  525. arelle/utils/validate/Validation.py +9 -1
  526. arelle/utils/validate/ValidationPlugin.py +74 -11
  527. arelle/utils/validate/ValidationUtil.py +55 -0
  528. arelle/webserver/bottle.py +5 -4424
  529. {arelle_release-2.17.1.dist-info → arelle_release-2.37.71.dist-info}/METADATA +51 -42
  530. arelle_release-2.37.71.dist-info/RECORD +697 -0
  531. {arelle_release-2.17.1.dist-info → arelle_release-2.37.71.dist-info}/WHEEL +1 -1
  532. {arelle_release-2.17.1.dist-info → arelle_release-2.37.71.dist-info/licenses}/LICENSE.md +1 -4
  533. {arelle_release-2.17.1.dist-info → arelle_release-2.37.71.dist-info}/top_level.txt +0 -1
  534. arelle/DialogOpenTaxonomyPackage.py +0 -1
  535. arelle/RenderingResolver.py +0 -624
  536. arelle/examples/.pydevproject +0 -5
  537. arelle/examples/CustomLogger.py +0 -43
  538. arelle/examples/LoadEFMvalidate.py +0 -32
  539. arelle/examples/LoadSavePreLbCsv.py +0 -26
  540. arelle/examples/LoadValidate.cs +0 -31
  541. arelle/examples/LoadValidate.py +0 -36
  542. arelle/examples/LoadValidateCmdLine.java +0 -69
  543. arelle/examples/LoadValidatePostedZip.java +0 -57
  544. arelle/examples/LoadValidateWebService.java +0 -34
  545. arelle/examples/SaveTableToExelle.py +0 -140
  546. arelle/examples/TR3toTR4.py +0 -88
  547. arelle/examples/plugin/bigInstance.py +0 -394
  548. arelle/examples/plugin/cmdWebServerExtension.py +0 -42
  549. arelle/examples/plugin/crashTest.py +0 -38
  550. arelle/examples/plugin/formulaSuiteConverter.py +0 -212
  551. arelle/examples/plugin/functionsCustom.py +0 -59
  552. arelle/examples/plugin/hello_dolly.py +0 -64
  553. arelle/examples/plugin/hello_i18n.pot +0 -26
  554. arelle/examples/plugin/hello_i18n.py +0 -32
  555. arelle/examples/plugin/importTestChild1.py +0 -21
  556. arelle/examples/plugin/importTestChild2.py +0 -22
  557. arelle/examples/plugin/importTestGrandchild1.py +0 -21
  558. arelle/examples/plugin/importTestGrandchild2.py +0 -21
  559. arelle/examples/plugin/importTestImported1.py +0 -23
  560. arelle/examples/plugin/importTestImported11.py +0 -22
  561. arelle/examples/plugin/importTestParent.py +0 -48
  562. arelle/examples/plugin/locale/fr/LC_MESSAGES/hello_i18n.po +0 -25
  563. arelle/examples/plugin/packagedImportTest/__init__.py +0 -47
  564. arelle/examples/plugin/packagedImportTest/importTestChild1.py +0 -21
  565. arelle/examples/plugin/packagedImportTest/importTestChild2.py +0 -22
  566. arelle/examples/plugin/packagedImportTest/importTestGrandchild1.py +0 -21
  567. arelle/examples/plugin/packagedImportTest/importTestGrandchild2.py +0 -21
  568. arelle/examples/plugin/packagedImportTest/importTestImported1.py +0 -24
  569. arelle/examples/plugin/packagedImportTest/importTestImported11.py +0 -21
  570. arelle/examples/plugin/packagedImportTest/subdir/importTestImported111.py +0 -21
  571. arelle/examples/plugin/packagedImportTest/subdir/subsubdir/importTestImported1111.py +0 -21
  572. arelle/examples/plugin/sakaCalendar.py +0 -215
  573. arelle/examples/plugin/saveInstanceInfoset.py +0 -121
  574. arelle/examples/plugin/streamingExtensions.py +0 -335
  575. arelle/examples/plugin/testcaseCalc11ValidateSetup.py +0 -32
  576. arelle/examples/plugin/testcaseIxExpectedHtmlFixup.py +0 -45
  577. arelle/examples/plugin/updateTableLB.py +0 -242
  578. arelle/examples/plugin/validate/XYZ/DisclosureSystems.py +0 -2
  579. arelle/examples/plugin/validate/XYZ/PluginValidationDataExtension.py +0 -10
  580. arelle/examples/plugin/validate/XYZ/ValidationPluginExtension.py +0 -49
  581. arelle/examples/plugin/validate/XYZ/__init__.py +0 -75
  582. arelle/examples/plugin/validate/XYZ/resources/config.xml +0 -16
  583. arelle/examples/plugin/validate/XYZ/rules/rules01.py +0 -109
  584. arelle/examples/plugin/validate/XYZ/rules/rules02.py +0 -58
  585. arelle/examples/plugin/validateSchemaLxml.py +0 -156
  586. arelle/examples/plugin/validateTableInfoset.py +0 -52
  587. arelle/examples/us-gaap-dei-docType-extraction-frm.xml +0 -90
  588. arelle/examples/us-gaap-dei-ratio-cash-frm.xml +0 -150
  589. arelle/plugin/functionsXmlCreation.py +0 -106
  590. arelle/plugin/instanceInfo.py +0 -306
  591. arelle/plugin/loadFromOIM-2018.py +0 -1282
  592. arelle/plugin/objectmaker.py +0 -285
  593. arelle/plugin/sphinx/FormulaGenerator.py +0 -823
  594. arelle/plugin/sphinx/SphinxContext.py +0 -404
  595. arelle/plugin/sphinx/SphinxEvaluator.py +0 -783
  596. arelle/plugin/sphinx/SphinxMethods.py +0 -1287
  597. arelle/plugin/sphinx/SphinxParser.py +0 -1093
  598. arelle/plugin/sphinx/SphinxValidator.py +0 -163
  599. arelle/plugin/sphinx/US-GAAP Ratios Example.xsr +0 -52
  600. arelle/plugin/sphinx/__init__.py +0 -285
  601. arelle/plugin/transforms/SEC/__init__.py +0 -308
  602. arelle/plugin/transforms/SEC/conf/README.md +0 -39
  603. arelle/plugin/transforms/SEC/conf/extractTestcase.sh +0 -2
  604. arelle/plugin/transforms/SEC/conf/extractTestcase.xsl +0 -109
  605. arelle/plugin/transforms/SEC/conf/runIxtSecTests.sh +0 -16
  606. arelle/plugin/transforms/SEC/conf/saxon9.jar +0 -0
  607. arelle/plugin/transforms/SEC/conf/testcase.xml +0 -7117
  608. arelle/plugin/transforms/SEC/conf/tests.xml +0 -848
  609. arelle/plugin/transforms/SEC/text2num.py +0 -110
  610. arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-boolballotbox.xml +0 -66
  611. arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-countrynameen.xml +0 -65
  612. arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-datequarterend.xml +0 -66
  613. arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-durday.xml +0 -61
  614. arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-durhour.xml +0 -69
  615. arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-durmonth.xml +0 -71
  616. arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-durweek.xml +0 -70
  617. arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-durwordsen.xml +0 -56
  618. arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-duryear.xml +0 -64
  619. arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-edgarprovcountryen.xml +0 -65
  620. arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-entityfilercategoryen.xml +0 -63
  621. arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-exchnameen.xml +0 -86
  622. arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-numwordsen.xml +0 -55
  623. arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-stateprovnameen.xml +0 -64
  624. arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-yesnoballotbox.xml +0 -66
  625. arelle/plugin/transforms/SEC/transformationRegistry/registry/transform-registry.xml +0 -314
  626. arelle/plugin/transforms/SEC/transformationRegistry/schema/inlinexbrl-sec-transformation.xsd +0 -418
  627. arelle/plugin/validate/EFM/Consts.py +0 -362
  628. arelle/plugin/validate/EFM/DTS.py +0 -569
  629. arelle/plugin/validate/EFM/Dimensions.py +0 -264
  630. arelle/plugin/validate/EFM/Document.py +0 -206
  631. arelle/plugin/validate/EFM/Filing.py +0 -4383
  632. arelle/plugin/validate/EFM/IsolateSeparateIXDSes.py +0 -19
  633. arelle/plugin/validate/EFM/MessageNumericId.py +0 -142
  634. arelle/plugin/validate/EFM/PreCalAlignment.py +0 -324
  635. arelle/plugin/validate/EFM/Util.py +0 -688
  636. arelle/plugin/validate/EFM/__init__.py +0 -843
  637. arelle/plugin/validate/EFM/config.xml +0 -333
  638. arelle/plugin/validate/EFM/resources/README.md +0 -57
  639. arelle/plugin/validate/EFM/resources/axiswarnings.json +0 -27
  640. arelle/plugin/validate/EFM/resources/cef-deprecated-concepts.json +0 -8
  641. arelle/plugin/validate/EFM/resources/country-deprecated-concepts.json +0 -19
  642. arelle/plugin/validate/EFM/resources/currency-deprecated-concepts.json +0 -7
  643. arelle/plugin/validate/EFM/resources/dei-deprecated-concepts.json +0 -8
  644. arelle/plugin/validate/EFM/resources/dei-validations.json +0 -2884
  645. arelle/plugin/validate/EFM/resources/dqc-us-rules.json +0 -1389
  646. arelle/plugin/validate/EFM/resources/ecd-deprecated-concepts.json +0 -1
  647. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-16-4.xml +0 -115
  648. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-17-0-4.xml +0 -300
  649. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-17-1.xml +0 -304
  650. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-17-2.xml +0 -290
  651. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-17-3-1.xml +0 -294
  652. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-18.1.xml +0 -549
  653. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-18.2.xml +0 -506
  654. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-18.3.xml +0 -496
  655. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-19-1.xml +0 -662
  656. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-19-2.xml +0 -3761
  657. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-19-3.xml +0 -3577
  658. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-20-1.xml +0 -4020
  659. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-20-2.xml +0 -3320
  660. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-20-3.xml +0 -2998
  661. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-2012.xml +0 -957
  662. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-2013.xml +0 -982
  663. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-2014.xml +0 -1001
  664. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-2015.xml +0 -1076
  665. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-2016.xml +0 -120
  666. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-21-1.xml +0 -3329
  667. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-21-2.xml +0 -1230
  668. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-21-3.xml +0 -1113
  669. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-21-4.xml +0 -1321
  670. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-22-1-preview.xml +0 -1721
  671. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-22-1.xml +0 -1841
  672. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-22-2-2.xml +0 -1450
  673. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-22-2.xml +0 -1429
  674. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-22-4.xml +0 -1527
  675. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-23-1-1.xml +0 -2049
  676. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-23-1.xml +0 -2065
  677. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-23-2.xml +0 -1674
  678. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-23-3.xml +0 -1715
  679. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-all-years.xml +0 -10671
  680. arelle/plugin/validate/EFM/resources/edgartaxonomies/erxl.xsd +0 -69
  681. arelle/plugin/validate/EFM/resources/edgartaxonomies/extendedtaxonomies-all-years.xml +0 -18
  682. arelle/plugin/validate/EFM/resources/edgartaxonomies/ifrs-taxonomies.xml +0 -3126
  683. arelle/plugin/validate/EFM/resources/edgartaxonomies/ifrstaxonomies-all-years.xml +0 -22
  684. arelle/plugin/validate/EFM/resources/ex26-validations.json +0 -255
  685. arelle/plugin/validate/EFM/resources/exch-deprecated-concepts.json +0 -163
  686. arelle/plugin/validate/EFM/resources/ifrs-full-deprecated-concepts.json +0 -204
  687. arelle/plugin/validate/EFM/resources/invest-deprecated-concepts.json +0 -99
  688. arelle/plugin/validate/EFM/resources/ixbrl-transform-registries.json +0 -16
  689. arelle/plugin/validate/EFM/resources/naics-deprecated-concepts.json +0 -295
  690. arelle/plugin/validate/EFM/resources/oef-deprecated-concepts.json +0 -59
  691. arelle/plugin/validate/EFM/resources/other-standard-taxonomies.json +0 -12
  692. arelle/plugin/validate/EFM/resources/rr-deprecated-concepts.json +0 -14
  693. arelle/plugin/validate/EFM/resources/rxp-deprecated-concepts.json +0 -1
  694. arelle/plugin/validate/EFM/resources/shr-deprecated-concepts.json +0 -1
  695. arelle/plugin/validate/EFM/resources/sic-deprecated-concepts.json +0 -1
  696. arelle/plugin/validate/EFM/resources/signwarnings.json +0 -112
  697. arelle/plugin/validate/EFM/resources/srt-deprecated-concepts.json +0 -1
  698. arelle/plugin/validate/EFM/resources/stpr-deprecated-concepts.json +0 -1
  699. arelle/plugin/validate/EFM/resources/taxonomy-compatibility.json +0 -79
  700. arelle/plugin/validate/EFM/resources/us-gaap-deprecated-concepts.json +0 -2886
  701. arelle/plugin/validate/EFM/resources/us-gaap-rels-2020.json +0 -29068
  702. arelle/plugin/validate/EFM/resources/us-gaap-rels-2021.json +0 -29598
  703. arelle/plugin/validate/EFM/resources/us-gaap-rels-2022.json +0 -29141
  704. arelle/plugin/validate/EFM/resources/us-gaap-rels-2023.json +0 -29400
  705. arelle/plugin/validate/EFM/resources/vip-deprecated-concepts.json +0 -1
  706. arelle/plugin/validate/EFM/tools/CheckTxmyRefs.py +0 -180
  707. arelle/plugin/validate/EFM-htm/Const.py +0 -205
  708. arelle/plugin/validate/EFM-htm/__init__.py +0 -217
  709. arelle/plugin/validate/EFM-htm/config.xml +0 -17
  710. arelle/plugin/validate/EFM-htm/resources/efm-htm.dtd +0 -664
  711. arelle/plugin/validate/ESEF/ESEF_Current/Image.py +0 -199
  712. arelle/plugin/validate/ESEF_2022/__init__.py +0 -47
  713. arelle/plugin/validate/GFM/__init__.py +0 -59
  714. arelle/plugin/validate/GFM/config.xml +0 -82
  715. arelle/plugin/validate/SBRnl/CustomLoader.py +0 -19
  716. arelle/plugin/validate/SBRnl/DTS.py +0 -305
  717. arelle/plugin/validate/SBRnl/Dimensions.py +0 -357
  718. arelle/plugin/validate/SBRnl/Document.py +0 -799
  719. arelle/plugin/validate/SBRnl/Filing.py +0 -467
  720. arelle/plugin/validate/SBRnl/__init__.py +0 -75
  721. arelle/plugin/validate/SBRnl/config.xml +0 -26
  722. arelle/plugin/validate/SBRnl/sbr-nl-taxonomies.xml +0 -754
  723. arelle/plugin/validate/USBestPractices.py +0 -570
  724. arelle/plugin/validate/USCorpAction.py +0 -557
  725. arelle/plugin/validate/USSecTagging.py +0 -337
  726. arelle/plugin/validate/XDC/__init__.py +0 -77
  727. arelle/plugin/validate/XDC/config.xml +0 -20
  728. arelle/plugin/validate/XFsyntax/__init__.py +0 -64
  729. arelle/plugin/validate/XFsyntax/xf.py +0 -2227
  730. arelle/plugin/validate/__init__.py +0 -20
  731. arelle/plugin/validate/calc2.py +0 -536
  732. arelle/plugin/validateSBRnl.py +0 -530
  733. arelle/scripts-macOS/startWebServer.command +0 -3
  734. arelle/scripts-unix/startWebServer.sh +0 -1
  735. arelle/scripts-windows/startWebServer.bat +0 -5
  736. arelle_release-2.17.1.dist-info/RECORD +0 -676
  737. tests/__init__.py +0 -0
  738. tests/integration_tests/ui_tests/ArelleGUITest/ArelleGUITest/ArelleGUITest.csproj +0 -30
  739. tests/integration_tests/ui_tests/ArelleGUITest/ArelleGUITest/Tests.cs +0 -381
  740. tests/integration_tests/ui_tests/ArelleGUITest/ArelleGUITest/Usings.cs +0 -1
  741. tests/integration_tests/ui_tests/ArelleGUITest/ArelleGUITest.sln +0 -31
  742. tests/integration_tests/ui_tests/resources/workiva.zip +0 -0
  743. tests/integration_tests/validation/README.md +0 -50
  744. tests/integration_tests/validation/conformance_suite_config.py +0 -59
  745. tests/integration_tests/validation/conformance_suite_configs.py +0 -63
  746. tests/integration_tests/validation/conformance_suite_configurations/efm_current.py +0 -261
  747. tests/integration_tests/validation/conformance_suite_configurations/esef_ixbrl_2021.py +0 -85
  748. tests/integration_tests/validation/conformance_suite_configurations/esef_ixbrl_2022.py +0 -90
  749. tests/integration_tests/validation/conformance_suite_configurations/esef_xhtml_2021.py +0 -15
  750. tests/integration_tests/validation/conformance_suite_configurations/esef_xhtml_2022.py +0 -15
  751. tests/integration_tests/validation/conformance_suite_configurations/nl_nt16.py +0 -13
  752. tests/integration_tests/validation/conformance_suite_configurations/nl_nt17.py +0 -13
  753. tests/integration_tests/validation/conformance_suite_configurations/nl_nt18.py +0 -13
  754. tests/integration_tests/validation/conformance_suite_configurations/xbrl_2_1.py +0 -34
  755. tests/integration_tests/validation/conformance_suite_configurations/xbrl_calculations_1_1.py +0 -40
  756. tests/integration_tests/validation/conformance_suite_configurations/xbrl_dimensions_1_0.py +0 -28
  757. tests/integration_tests/validation/conformance_suite_configurations/xbrl_extensible_enumerations_1_0.py +0 -10
  758. tests/integration_tests/validation/conformance_suite_configurations/xbrl_extensible_enumerations_2_0.py +0 -10
  759. tests/integration_tests/validation/conformance_suite_configurations/xbrl_formula_1_0.py +0 -9
  760. tests/integration_tests/validation/conformance_suite_configurations/xbrl_formula_1_0_assertion_severity_2_0.py +0 -9
  761. tests/integration_tests/validation/conformance_suite_configurations/xbrl_formula_1_0_function_registry.py +0 -14
  762. tests/integration_tests/validation/conformance_suite_configurations/xbrl_ixbrl_1_1.py +0 -22
  763. tests/integration_tests/validation/conformance_suite_configurations/xbrl_link_role_registry_1_0.py +0 -11
  764. tests/integration_tests/validation/conformance_suite_configurations/xbrl_oim_1_0.py +0 -19
  765. tests/integration_tests/validation/conformance_suite_configurations/xbrl_table_linkbase_1_0.py +0 -296
  766. tests/integration_tests/validation/conformance_suite_configurations/xbrl_taxonomy_packages_1_0.py +0 -13
  767. tests/integration_tests/validation/conformance_suite_configurations/xbrl_transformation_registry_3.py +0 -13
  768. tests/integration_tests/validation/conformance_suite_configurations/xbrl_transformation_registry_4.py +0 -13
  769. tests/integration_tests/validation/conformance_suite_configurations/xbrl_transformation_registry_5.py +0 -13
  770. tests/integration_tests/validation/conformance_suite_configurations/xbrl_utr_malformed_1_0.py +0 -31
  771. tests/integration_tests/validation/conformance_suite_configurations/xbrl_utr_registry_1_0.py +0 -22
  772. tests/integration_tests/validation/conformance_suite_configurations/xbrl_utr_structure_1_0.py +0 -18
  773. tests/integration_tests/validation/conftest.py +0 -24
  774. tests/integration_tests/validation/discover_tests.py +0 -22
  775. tests/integration_tests/validation/download_conformance_suites.py +0 -47
  776. tests/integration_tests/validation/run_conformance_suites.py +0 -175
  777. tests/integration_tests/validation/test_conformance_suites.py +0 -14
  778. tests/integration_tests/validation/validation_util.py +0 -271
  779. tests/resources/conformance_suites/nl_nt16/br_kvk/2-04-invalid-period.xbrl +0 -63
  780. tests/resources/conformance_suites/nl_nt16/br_kvk/2-04-testcase.xml +0 -22
  781. tests/resources/conformance_suites/nl_nt16/br_kvk/3-01-missing.xbrl +0 -53
  782. tests/resources/conformance_suites/nl_nt16/br_kvk/3-01-multiple.xbrl +0 -60
  783. tests/resources/conformance_suites/nl_nt16/br_kvk/3-01-testcase.xml +0 -33
  784. tests/resources/conformance_suites/nl_nt16/br_kvk/4-07-invalid.xbrl +0 -57
  785. tests/resources/conformance_suites/nl_nt16/br_kvk/4-07-testcase.xml +0 -22
  786. tests/resources/conformance_suites/nl_nt16/br_kvk/4-10-invalid.xbrl +0 -58
  787. tests/resources/conformance_suites/nl_nt16/br_kvk/4-10-testcase.xml +0 -22
  788. tests/resources/conformance_suites/nl_nt16/br_kvk/4-12-invalid.xbrl +0 -63
  789. tests/resources/conformance_suites/nl_nt16/br_kvk/4-12-testcase.xml +0 -22
  790. tests/resources/conformance_suites/nl_nt16/br_kvk/4-16-missing.xbrl +0 -61
  791. tests/resources/conformance_suites/nl_nt16/br_kvk/4-16-testcase.xml +0 -22
  792. tests/resources/conformance_suites/nl_nt16/br_kvk/4-20-invalid-date.xbrl +0 -89
  793. tests/resources/conformance_suites/nl_nt16/br_kvk/4-20-testcase.xml +0 -22
  794. tests/resources/conformance_suites/nl_nt16/fr_kvk/1-01-invalid-file-extension.xml +0 -56
  795. tests/resources/conformance_suites/nl_nt16/fr_kvk/1-01-testcase.xml +0 -22
  796. tests/resources/conformance_suites/nl_nt16/fr_kvk/2-01-invalid-lang.xbrl +0 -56
  797. tests/resources/conformance_suites/nl_nt16/fr_kvk/2-01-missing-lang.xbrl +0 -55
  798. tests/resources/conformance_suites/nl_nt16/fr_kvk/2-01-testcase.xml +0 -33
  799. tests/resources/conformance_suites/nl_nt16/fr_kvk/2-03-entrypoint.xsd +0 -6
  800. tests/resources/conformance_suites/nl_nt16/fr_kvk/2-03-invalid-entrypoint.xbrl +0 -63
  801. tests/resources/conformance_suites/nl_nt16/fr_kvk/2-03-testcase.xml +0 -22
  802. tests/resources/conformance_suites/nl_nt16/fr_kvk/5-01-invalid-decimals.xbrl +0 -49
  803. tests/resources/conformance_suites/nl_nt16/fr_kvk/5-01-testcase.xml +0 -22
  804. tests/resources/conformance_suites/nl_nt16/fr_kvk/5-02-invalid-decimals.xbrl +0 -49
  805. tests/resources/conformance_suites/nl_nt16/fr_kvk/5-02-testcase.xml +0 -22
  806. tests/resources/conformance_suites/nl_nt16/fr_nl/1-01-invalid-file.xbrl +0 -2
  807. tests/resources/conformance_suites/nl_nt16/fr_nl/1-01-invalid-zip.zip +0 -0
  808. tests/resources/conformance_suites/nl_nt16/fr_nl/1-01-testcase.xml +0 -33
  809. tests/resources/conformance_suites/nl_nt16/fr_nl/1-03-invalid-doctype.xbrl +0 -4
  810. tests/resources/conformance_suites/nl_nt16/fr_nl/1-03-testcase.xml +0 -22
  811. tests/resources/conformance_suites/nl_nt16/fr_nl/1-05-invalid-encoding.xbrl +0 -0
  812. tests/resources/conformance_suites/nl_nt16/fr_nl/1-05-testcase.xml +0 -22
  813. tests/resources/conformance_suites/nl_nt16/fr_nl/1-06-testcase.xml +0 -22
  814. tests/resources/conformance_suites/nl_nt16/fr_nl/1-06.invalid.xbrl +0 -2
  815. tests/resources/conformance_suites/nl_nt16/fr_nl/2-06-invalid-file.xbrl +0 -8
  816. tests/resources/conformance_suites/nl_nt16/fr_nl/2-06-invalid-zip.zip +0 -0
  817. tests/resources/conformance_suites/nl_nt16/fr_nl/2-06-testcase.xml +0 -33
  818. tests/resources/conformance_suites/nl_nt16/index.xml +0 -20
  819. tests/resources/conformance_suites/nl_nt17/br_kvk/2-04-invalid-period.xbrl +0 -63
  820. tests/resources/conformance_suites/nl_nt17/br_kvk/2-04-testcase.xml +0 -22
  821. tests/resources/conformance_suites/nl_nt17/br_kvk/3-01-missing.xbrl +0 -53
  822. tests/resources/conformance_suites/nl_nt17/br_kvk/3-01-multiple.xbrl +0 -60
  823. tests/resources/conformance_suites/nl_nt17/br_kvk/3-01-testcase.xml +0 -33
  824. tests/resources/conformance_suites/nl_nt17/br_kvk/4-07-invalid.xbrl +0 -57
  825. tests/resources/conformance_suites/nl_nt17/br_kvk/4-07-testcase.xml +0 -22
  826. tests/resources/conformance_suites/nl_nt17/br_kvk/4-10-invalid.xbrl +0 -58
  827. tests/resources/conformance_suites/nl_nt17/br_kvk/4-10-testcase.xml +0 -22
  828. tests/resources/conformance_suites/nl_nt17/br_kvk/4-12-invalid.xbrl +0 -63
  829. tests/resources/conformance_suites/nl_nt17/br_kvk/4-12-testcase.xml +0 -22
  830. tests/resources/conformance_suites/nl_nt17/br_kvk/4-16-missing.xbrl +0 -61
  831. tests/resources/conformance_suites/nl_nt17/br_kvk/4-16-testcase.xml +0 -22
  832. tests/resources/conformance_suites/nl_nt17/br_kvk/4-20-invalid-date.xbrl +0 -89
  833. tests/resources/conformance_suites/nl_nt17/br_kvk/4-20-testcase.xml +0 -22
  834. tests/resources/conformance_suites/nl_nt17/fr_kvk/1-01-invalid-file-extension.xml +0 -56
  835. tests/resources/conformance_suites/nl_nt17/fr_kvk/1-01-testcase.xml +0 -22
  836. tests/resources/conformance_suites/nl_nt17/fr_kvk/2-01-invalid-lang.xbrl +0 -56
  837. tests/resources/conformance_suites/nl_nt17/fr_kvk/2-01-missing-lang.xbrl +0 -55
  838. tests/resources/conformance_suites/nl_nt17/fr_kvk/2-01-testcase.xml +0 -33
  839. tests/resources/conformance_suites/nl_nt17/fr_kvk/2-03-entrypoint.xsd +0 -6
  840. tests/resources/conformance_suites/nl_nt17/fr_kvk/2-03-invalid-entrypoint.xbrl +0 -63
  841. tests/resources/conformance_suites/nl_nt17/fr_kvk/2-03-testcase.xml +0 -22
  842. tests/resources/conformance_suites/nl_nt17/fr_kvk/5-01-invalid-decimals.xbrl +0 -49
  843. tests/resources/conformance_suites/nl_nt17/fr_kvk/5-01-testcase.xml +0 -22
  844. tests/resources/conformance_suites/nl_nt17/fr_kvk/5-02-invalid-decimals.xbrl +0 -49
  845. tests/resources/conformance_suites/nl_nt17/fr_kvk/5-02-testcase.xml +0 -22
  846. tests/resources/conformance_suites/nl_nt17/fr_nl/1-01-invalid-file.xbrl +0 -2
  847. tests/resources/conformance_suites/nl_nt17/fr_nl/1-01-invalid-zip.zip +0 -0
  848. tests/resources/conformance_suites/nl_nt17/fr_nl/1-01-testcase.xml +0 -33
  849. tests/resources/conformance_suites/nl_nt17/fr_nl/1-03-invalid-doctype.xbrl +0 -4
  850. tests/resources/conformance_suites/nl_nt17/fr_nl/1-03-testcase.xml +0 -22
  851. tests/resources/conformance_suites/nl_nt17/fr_nl/1-05-invalid-encoding.xbrl +0 -0
  852. tests/resources/conformance_suites/nl_nt17/fr_nl/1-05-testcases.xml +0 -22
  853. tests/resources/conformance_suites/nl_nt17/fr_nl/1-06-testcase.xml +0 -22
  854. tests/resources/conformance_suites/nl_nt17/fr_nl/1-06.invalid.xbrl +0 -2
  855. tests/resources/conformance_suites/nl_nt17/fr_nl/2-06-invalid-file.xbrl +0 -8
  856. tests/resources/conformance_suites/nl_nt17/fr_nl/2-06-invalid-zip.zip +0 -0
  857. tests/resources/conformance_suites/nl_nt17/fr_nl/2-06-testcase.xml +0 -33
  858. tests/resources/conformance_suites/nl_nt17/index.xml +0 -20
  859. tests/resources/conformance_suites/nl_nt18/fr_nl/1-03-invalid-doctype.xbrl +0 -4
  860. tests/resources/conformance_suites/nl_nt18/fr_nl/1-03-testcase.xml +0 -22
  861. tests/resources/conformance_suites/nl_nt18/fr_nl/1-05-invalid-encoding.xbrl +0 -0
  862. tests/resources/conformance_suites/nl_nt18/fr_nl/1-05-testcases.xml +0 -22
  863. tests/resources/conformance_suites/nl_nt18/fr_nl/1-06-testcase.xml +0 -22
  864. tests/resources/conformance_suites/nl_nt18/fr_nl/1-06.invalid.xbrl +0 -2
  865. tests/resources/conformance_suites/nl_nt18/fr_nl/1.01-invalid-file.xbrl +0 -2
  866. tests/resources/conformance_suites/nl_nt18/fr_nl/1.01-invalid-zip.zip +0 -0
  867. tests/resources/conformance_suites/nl_nt18/fr_nl/1.01-testcase.xml +0 -33
  868. tests/resources/conformance_suites/nl_nt18/fr_nl/2-06-invalid-file.xbrl +0 -8
  869. tests/resources/conformance_suites/nl_nt18/fr_nl/2-06-invalid-zip.zip +0 -0
  870. tests/resources/conformance_suites/nl_nt18/fr_nl/2-06-testcase.xml +0 -33
  871. tests/resources/conformance_suites/nl_nt18/index.xml +0 -8
  872. tests/unit_tests/arelle/conftest.py +0 -16
  873. tests/unit_tests/arelle/formula/test_fact_aspects_cache.py +0 -170
  874. tests/unit_tests/arelle/plugin/test_loadfromoim.py +0 -40
  875. tests/unit_tests/arelle/plugin/test_plugin_imports.py +0 -27
  876. tests/unit_tests/arelle/test_betafeatures.py +0 -81
  877. tests/unit_tests/arelle/test_cntlr.py +0 -28
  878. tests/unit_tests/arelle/test_import.py +0 -40
  879. tests/unit_tests/arelle/test_locale.py +0 -73
  880. tests/unit_tests/arelle/test_modelmanager.py +0 -15
  881. tests/unit_tests/arelle/test_packagemanager.py +0 -65
  882. tests/unit_tests/arelle/test_pluginmanager.py +0 -176
  883. tests/unit_tests/arelle/test_qname.py +0 -140
  884. tests/unit_tests/arelle/test_runtimeoptions.py +0 -56
  885. tests/unit_tests/arelle/test_system_info.py +0 -26
  886. tests/unit_tests/arelle/test_updater.py +0 -507
  887. tests/unit_tests/arelle/test_urlutil.py +0 -49
  888. tests/unit_tests/arelle/test_version.py +0 -46
  889. tests/unit_tests/arelle/utils/validate/test_decorator.py +0 -59
  890. /arelle/{examples/plugin/validate/XYZ → plugin/validate/EDINET}/rules/__init__.py +0 -0
  891. /arelle/plugin/validate/{HMRC → UK}/consistencyChecksByName.json +0 -0
  892. /arelle/plugin/validate/{HMRC → UK}/hmrc-taxonomies.xml +0 -0
  893. {arelle_release-2.17.1.dist-info → arelle_release-2.37.71.dist-info}/entry_points.txt +0 -0
@@ -1,799 +0,0 @@
1
- '''
2
- See COPYRIGHT.md for copyright information.
3
- '''
4
- from arelle import ModelDocument, XmlUtil, XbrlConst
5
- from arelle.ModelDtsObject import ModelConcept, ModelLocator, ModelResource, ModelType
6
- from arelle.ModelValue import qname
7
- from arelle.ModelObject import ModelObject, ModelComment
8
- from arelle.ValidateXbrlDTS import arcFromConceptQname, arcToConceptQname
9
- from arelle import XmlValidate
10
- from lxml import etree
11
- import regex as re
12
-
13
- xsd1_1datatypes = {qname(XbrlConst.xsd,'anyAtomicType'), qname(XbrlConst.xsd,'yearMonthDuration'), qname(XbrlConst.xsd,'dayTimeDuration'), qname(XbrlConst.xsd,'dateTimeStamp'), qname(XbrlConst.xsd,'precisionDecimal')}
14
-
15
- def checkDTSdocument(val, modelDocument, isFilingDocument):
16
- if not isFilingDocument:
17
- return # not a filing's extension document
18
-
19
- val.valUsedPrefixes = set()
20
- val.referencedNamespaces = set()
21
- val.substititutionGroupQname = {}
22
-
23
- modelXbrl = val.modelXbrl
24
- if modelDocument.type in (ModelDocument.Type.SCHEMA, ModelDocument.Type.LINKBASE):
25
- isSchema = modelDocument.type == ModelDocument.Type.SCHEMA
26
- docinfo = modelDocument.xmlDocument.docinfo
27
- if docinfo and docinfo.xml_version != "1.0":
28
- modelXbrl.error("SBR.NL.2.2.0.02" if isSchema else "SBR.NL.2.3.0.02",
29
- _('%(docType)s xml version must be "1.0" but is "%(xmlVersion)s"'),
30
- modelObject=modelDocument, docType=modelDocument.gettype().title(),
31
- xmlVersion=docinfo.xml_version)
32
- if modelDocument.documentEncoding.lower() != "utf-8":
33
- modelXbrl.error("SBR.NL.2.2.0.03" if isSchema else "SBR.NL.2.3.0.03",
34
- _('%(docType)s encoding must be "utf-8" but is "%(xmlEncoding)s"'),
35
- modelObject=modelDocument, docType=modelDocument.gettype().title(),
36
- xmlEncoding=modelDocument.documentEncoding)
37
- lookingForPrecedingComment = True
38
- for commentNode in modelDocument.xmlRootElement.itersiblings(preceding=True):
39
- if isinstance(commentNode, etree._Comment):
40
- if lookingForPrecedingComment:
41
- lookingForPrecedingComment = False
42
- else:
43
- modelXbrl.error("SBR.NL.2.2.0.05" if isSchema else "SBR.NL.2.3.0.05",
44
- _('%(docType)s must have only one comment node before schema element'),
45
- modelObject=modelDocument, docType=modelDocument.gettype().title())
46
- if lookingForPrecedingComment:
47
- modelXbrl.error("SBR.NL.2.2.0.04" if isSchema else "SBR.NL.2.3.0.04",
48
- _('%(docType)s must have comment node only on line 2'),
49
- modelObject=modelDocument, docType=modelDocument.gettype().title())
50
-
51
- if isSchema:
52
- for elt in modelDocument.xmlRootElement.iter(tag="{http://www.w3.org/2001/XMLSchema}*"):
53
- parent = elt.getparent()
54
- parentIsSchema = parent is not None and parent.tag == "{http://www.w3.org/2001/XMLSchema}schema"
55
- localName = elt.localName
56
- if localName == "schema":
57
- if elt.get("targetNamespace") is None:
58
- val.modelXbrl.error("SBR.NL.2.2.0.08",
59
- _('Schema element must have a targetNamespace attribute'),
60
- modelObject=elt)
61
- if (elt.get("attributeFormDefault") != "unqualified" or
62
- elt.get("elementFormDefault") != "qualified"):
63
- val.modelXbrl.error("SBR.NL.2.2.0.09",
64
- _('Schema element attributeFormDefault must be "unqualified" and elementFormDefault must be "qualified"'),
65
- modelObject=elt)
66
- for attrName in ("blockDefault", "finalDefault", "version"):
67
- if elt.get(attrName) is not None:
68
- val.modelXbrl.error("SBR.NL.2.2.0.10",
69
- _('Schema element must not have a %(attribute)s attribute'),
70
- modelObject=elt, attribute=attrName)
71
- else:
72
- if localName in ("assert", "openContent", "fallback"):
73
- val.modelXbrl.error("SBR.NL.2.2.0.01",
74
- _('Schema contains XSD 1.1 content "%(element)s"'),
75
- modelObject=elt, element=elt.qname)
76
-
77
- if localName == "element":
78
- for attr, presence, errCode in (("block", False, "2.2.2.09"),
79
- ("final", False, "2.2.2.10"),
80
- ("fixed", False, "2.2.2.11"),
81
- ("form", False, "2.2.2.12"),):
82
- if (elt.get(attr) is not None) != presence:
83
- val.modelXbrl.error("SBR.NL.{0}".format(errCode),
84
- _('Schema element %(concept)s %(requirement)s contain attribute %(attribute)s'),
85
- modelObject=elt, concept=elt.get("name"),
86
- requirement=(_("MUST NOT"),_("MUST"))[presence], attribute=attr,
87
- messageCodes=("SBR.NL.2.2.2.09", "SBR.NL.2.2.2.10", "SBR.NL.2.2.2.11", "SBR.NL.2.2.2.12"))
88
- eltName = elt.get("name")
89
- if eltName is not None: # skip for concepts which are refs
90
- type = qname(elt, elt.get("type"))
91
- eltQname = elt.qname
92
- if type in xsd1_1datatypes:
93
- val.modelXbrl.error("SBR.NL.2.2.0.01",
94
- _('Schema element %(concept)s contains XSD 1.1 datatype "%(xsdType)s"'),
95
- modelObject=elt, concept=elt.get("name"), xsdType=type)
96
- if not parentIsSchema: # root element
97
- if elt.get("name") is not None and (elt.isItem or elt.isTuple):
98
- val.modelXbrl.error("SBR.NL.2.2.2.01",
99
- _('Schema concept definition is not at the root level: %(concept)s'),
100
- modelObject=elt, concept=elt.get("name"))
101
- elif eltQname not in val.typedDomainQnames:
102
- for attr, presence, errCode in (("abstract", True, "2.2.2.08"),
103
- ("id", True, "2.2.2.13"),
104
- ("nillable", True, "2.2.2.15"),
105
- ("substitutionGroup", True, "2.2.2.18"),):
106
- if (elt.get(attr) is not None) != presence:
107
- val.modelXbrl.error("SBR.NL.{0}".format(errCode),
108
- _('Schema root element %(concept)s %(requirement)s contain attribute %(attribute)s'),
109
- modelObject=elt, concept=elt.get("name"),
110
- requirement=(_("MUST NOT"),_("MUST"))[presence], attribute=attr,
111
- messageCodes=("SBR.NL.2.2.2.08", "SBR.NL.2.2.2.13", "SBR.NL.2.2.2.15", "SBR.NL.2.2.2.18"))
112
- # semantic checks
113
- if elt.isTuple:
114
- val.hasTuple = True
115
- elif elt.isLinkPart:
116
- val.hasLinkPart = True
117
- elif elt.isItem:
118
- if elt.isDimensionItem:
119
- val.hasDimension = True
120
- #elif elt.substitutesFor()
121
- if elt.isAbstract:
122
- val.hasAbstractItem = True
123
- else:
124
- val.hasNonAbstraceElement = True
125
- if elt.isAbstract and elt.isItem:
126
- val.hasAbstractItem = True
127
- if elt.typeQname is not None:
128
- val.referencedNamespaces.add(elt.typeQname.namespaceURI)
129
- if elt.substitutionGroupQname is not None:
130
- val.referencedNamespaces.add(elt.substitutionGroupQname.namespaceURI)
131
- if elt.isTypedDimension and elt.typedDomainElement is not None:
132
- val.referencedNamespaces.add(elt.typedDomainElement.namespaceURI)
133
- else:
134
- referencedElt = elt.dereference()
135
- if referencedElt is not None:
136
- val.referencedNamespaces.add(referencedElt.modelDocument.targetNamespace)
137
- if not parentIsSchema:
138
- eltDecl = elt.dereference()
139
- if (elt.get("minOccurs") is None or elt.get("maxOccurs") is None):
140
- val.modelXbrl.error("SBR.NL.2.2.2.14",
141
- _('Schema %(element)s must have minOccurs and maxOccurs'),
142
- modelObject=elt, element=eltDecl.qname)
143
- elif elt.get("maxOccurs") != "1" and eltDecl.isItem:
144
- val.modelXbrl.error("SBR.NL.2.2.2.30",
145
- _("Tuple concept %(concept)s must have maxOccurs='1'"),
146
- modelObject=elt, concept=eltDecl.qname)
147
- if eltDecl.isItem and eltDecl.isAbstract:
148
- val.modelXbrl.error("SBR.NL.2.2.2.31",
149
- _("Abstract concept %(concept)s must not be a child of a tuple"),
150
- modelObject=elt, concept=eltDecl.qname)
151
- elif localName in ("sequence","choice"):
152
- for attrName in ("minOccurs", "maxOccurs"):
153
- attrValue = elt.get(attrName)
154
- if attrValue is None:
155
- val.modelXbrl.error("SBR.NL.2.2.2.14",
156
- _('Schema %(element)s must have %(attrName)s'),
157
- modelObject=elt, element=elt.elementQname, attrName=attrName)
158
- elif attrValue != "1":
159
- val.modelXbrl.error("SBR.NL.2.2.2.33",
160
- _('Schema %(element)s must have %(attrName)s = "1"'),
161
- modelObject=elt, element=elt.elementQname, attrName=attrName)
162
- elif localName in {"complexType","simpleType"}:
163
- qnameDerivedFrom = elt.qnameDerivedFrom
164
- if qnameDerivedFrom is not None:
165
- if isinstance(qnameDerivedFrom, list): # union
166
- for qn in qnameDerivedFrom:
167
- val.referencedNamespaces.add(qn.namespaceURI)
168
- else: # not union type
169
- val.referencedNamespaces.add(qnameDerivedFrom.namespaceURI)
170
- elif localName == "attribute":
171
- if elt.typeQname is not None:
172
- val.referencedNamespaces.add(elt.typeQname.namespaceURI)
173
- elif localName == "appinfo":
174
- if (parent.localName != "annotation" or parent.namespaceURI != XbrlConst.xsd or
175
- parent.getparent().localName != "schema" or parent.getparent().namespaceURI != XbrlConst.xsd or
176
- XmlUtil.previousSiblingElement(parent) != None):
177
- val.modelXbrl.error("SBR.NL.2.2.0.12",
178
- _('Annotation/appinfo record must be be behind schema and before import'), modelObject=elt)
179
- nextSiblingElement = XmlUtil.nextSiblingElement(parent)
180
- if nextSiblingElement is not None and nextSiblingElement.localName != "import":
181
- val.modelXbrl.error("SBR.NL.2.2.0.14",
182
- _('Annotation/appinfo record must be followed only by import'),
183
- modelObject=elt)
184
- elif localName == "annotation":
185
- val.annotationsCount += 1
186
- if not XmlUtil.hasChild(elt,XbrlConst.xsd,"appinfo"):
187
- val.modelXbrl.error("SBR.NL.2.2.0.12",
188
- _('Schema file annotation missing appinfo element must be be behind schema and before import'),
189
- modelObject=elt)
190
- elif localName in {"all", "documentation", "any", "anyAttribute", "attributeGroup",
191
- # comment out per R.H. 2011-11-16 "complexContent", "complexType", "extension",
192
- "field", "group", "key", "keyref",
193
- "list", "notation", "redefine", "selector", "unique"}:
194
- val.modelXbrl.error("SBR.NL.2.2.11.{0:02}".format({"all":1, "documentation":2, "any":3, "anyAttribute":4, "attributeGroup":7,
195
- "complexContent":10, "complexType":11, "extension":12, "field":13, "group":14, "key":15, "keyref":16,
196
- "list":17, "notation":18, "redefine":20, "selector":22, "unique":23}[localName]),
197
- _('Schema file element must not be used "%(element)s"'),
198
- modelObject=elt, element=elt.qname,
199
- messageCodes=("SBR.NL.2.2.11.01", "SBR.NL.2.2.11.02", "SBR.NL.2.2.11.03", "SBR.NL.2.2.11.04", "SBR.NL.2.2.11.07", "SBR.NL.2.2.11.10", "SBR.NL.2.2.11.11", "SBR.NL.2.2.11.12",
200
- "SBR.NL.2.2.11.13", "SBR.NL.2.2.11.14", "SBR.NL.2.2.11.15", "SBR.NL.2.2.11.16", "SBR.NL.2.2.11.17", "SBR.NL.2.2.11.18", "SBR.NL.2.2.11.20", "SBR.NL.2.2.11.22", "SBR.NL.2.2.11.23"))
201
- if not elt.prefix:
202
- val.modelXbrl.error("SBR.NL.2.2.0.06",
203
- 'Schema element is not prefixed: "%(element)s"',
204
- modelObject=elt, element=elt.qname)
205
- for elt in modelDocument.xmlRootElement.iter(tag="{http://www.xbrl.org/2003/linkbase}*"):
206
- if elt.localName in ("roleType","arcroleType"):
207
- uriAttr = {"roleType":"roleURI",
208
- "arcroleType":"arcroleURI"}[elt.localName]
209
- XmlValidate.validate(val.modelXbrl, elt) # validate [arc]roleType
210
- roleURI = elt.get(uriAttr)
211
- if elt.localName == "arcroleType":
212
- val.modelXbrl.error("SBR.NL.2.2.4.01",
213
- _('ArcroleType is not allowed %(roleURI)s'),
214
- modelObject=elt, roleURI=roleURI)
215
- else: # roleType
216
- roleTypeModelObject = modelDocument.idObjects.get(elt.get("id"))
217
- if roleTypeModelObject is not None and not roleTypeModelObject.genLabel(lang="nl"):
218
- val.modelXbrl.error("SBR.NL.2.3.8.05",
219
- _('RoleType %(roleURI)s must have a label in lang "nl"'),
220
- modelObject=elt, roleURI=roleURI)
221
- # check for used on duplications
222
- usedOns = set()
223
- for usedOn in elt.iterdescendants(tag="{http://www.xbrl.org/2003/linkbase}usedOn"):
224
- if isinstance(usedOn,ModelObject):
225
- qName = qname(usedOn, XmlUtil.text(usedOn))
226
- val.valUsedPrefixes.add(qName.prefix)
227
- if qName == XbrlConst.qnLinkCalculationLink:
228
- val.modelXbrl.error("SBR.NL.2.2.3.01",
229
- _("%(element)s usedOn must not be link:calculationLink"),
230
- modelObject=elt, element=elt.qname, value=qName)
231
- if elt.localName == "roleType" and qName in XbrlConst.standardExtLinkQnames:
232
- if not any((key[1] == roleURI and key[2] == qName)
233
- for key in val.modelXbrl.baseSets.keys()):
234
- val.modelXbrl.error("SBR.NL.2.2.3.02",
235
- _("%(element)s usedOn %(usedOn)s not addressed for role %(role)s"),
236
- modelObject=elt, element=elt.qname, usedOn=qName, role=roleURI)
237
- if val.annotationsCount > 1:
238
- modelXbrl.error("SBR.NL.2.2.0.22",
239
- _('Schema has %(annotationsCount)s xs:annotation elements, only 1 allowed'),
240
- modelObject=modelDocument, annotationsCount=val.annotationsCount)
241
- if modelDocument.type == ModelDocument.Type.LINKBASE:
242
- for elt in modelDocument.xmlRootElement.iter():
243
- if isinstance(elt, ModelObject) and not elt.prefix:
244
- val.modelXbrl.error("SBR.NL.2.2.0.06",
245
- _('Linkbase element is not prefixed: "%(element)s"'),
246
- modelObject=elt, element=elt.qname)
247
- if not val.containsRelationship:
248
- modelXbrl.error("SBR.NL.2.3.0.12",
249
- "Linkbase has no relationships",
250
- modelObject=modelDocument)
251
- # check file name suffixes
252
- extLinkElt = XmlUtil.descendant(modelDocument.xmlRootElement, XbrlConst.link, "*", "{http://www.w3.org/1999/xlink}type", "extended")
253
- if extLinkElt is not None:
254
- expectedSuffix = None
255
- if extLinkElt.localName == "labelLink":
256
- anyLabel = XmlUtil.descendant(modelDocument.xmlRootElement, XbrlConst.link, "label", "{http://www.w3.org/XML/1998/namespace}lang", "*")
257
- if anyLabel is not None:
258
- xmlLang = anyLabel.get("{http://www.w3.org/XML/1998/namespace}lang")
259
- expectedSuffix = "-lab-{0}.xml".format(xmlLang)
260
- else:
261
- expectedSuffix = {"referenceLink": "-ref.xml",
262
- "presentationLink": "-pre.xml",
263
- "definitionLink": "-def.xml"}.get(extLinkElt.localName, None)
264
- if expectedSuffix:
265
- if not modelDocument.uri.endswith(expectedSuffix):
266
- modelXbrl.error("SBR.NL.3.2.1.09",
267
- "Linkbase filename expected to end with %(expectedSuffix)s: %(filename)s",
268
- modelObject=modelDocument, expectedSuffix=expectedSuffix, filename=modelDocument.uri)
269
- elif extLinkElt.qname == XbrlConst.qnGenLink:
270
- anyLabel = XmlUtil.descendant(modelDocument.xmlRootElement, XbrlConst.link, "label", "{http://www.w3.org/XML/1998/namespace}lang", "*")
271
- if anyLabel is not None:
272
- xmlLang = anyLabel.get("{http://www.w3.org/XML/1998/namespace}lang")
273
- expectedSuffix = "-generic-lab-{0}.xml".format(xmlLang)
274
- elif XmlUtil.descendant(modelDocument.xmlRootElement, XbrlConst.link, "reference") is not None:
275
- expectedSuffix = "-generic-ref.xml"
276
- if expectedSuffix and not modelDocument.uri.endswith(expectedSuffix):
277
- modelXbrl.error("SBR.NL.3.2.1.10",
278
- "Generic linkbase filename expected to end with %(expectedSuffix)s: %(filename)s",
279
- modelObject=modelDocument, expectedSuffix=expectedSuffix, filename=modelDocument.uri)
280
- # label checks
281
- for qnLabel in (XbrlConst.qnLinkLabel, XbrlConst.qnGenLabel):
282
- for modelLabel in modelDocument.xmlRootElement.iterdescendants(tag=qnLabel.clarkNotation):
283
- if isinstance(modelLabel, ModelResource):
284
- if not modelLabel.text or not modelLabel.text[:1].isupper():
285
- modelXbrl.error("SBR.NL.3.2.7.05",
286
- _("Labels MUST have a capital first letter, label %(label)s: %(text)s"),
287
- modelObject=modelLabel, label=modelLabel.xlinkLabel, text=modelLabel.text[:64])
288
- if modelLabel.role in (XbrlConst.standardLabel, XbrlConst.genStandardLabel):
289
- if len(modelLabel.text) > 255:
290
- modelXbrl.error("SBR.NL.3.2.7.06",
291
- _("Labels with the 'standard' role MUST NOT exceed 255 characters, label %(label)s: %(text)s"),
292
- modelObject=modelLabel, label=modelLabel.xlinkLabel, text=modelLabel.text[:64])
293
- if modelLabel.role in (XbrlConst.standardLabel, XbrlConst.genStandardLabel):
294
- if len(modelLabel.text) > 255:
295
- modelXbrl.error("SBR.NL.3.2.7.06",
296
- _("Labels with the 'standard' role MUST NOT exceed 255 characters, label %(label)s: %(text)s"),
297
- modelObject=modelLabel, label=modelLabel.xlinkLabel, text=modelLabel.text[:64])
298
- for modelResource in modelDocument.xmlRootElement.iter():
299
- # locator checks
300
- if isinstance(modelResource, ModelLocator):
301
- hrefModelObject = modelResource.dereference()
302
- if isinstance(hrefModelObject, ModelObject):
303
- expectedLocLabel = hrefModelObject.id + "_loc"
304
- if modelResource.xlinkLabel != expectedLocLabel:
305
- modelXbrl.error("SBR.NL.3.2.11.01",
306
- _("Locator @xlink:label names MUST be concatenated from: @id from the XML node, underscore, 'loc', expected %(expectedLocLabel)s, found %(foundLocLabel)s"),
307
- modelObject=modelResource, expectedLocLabel=expectedLocLabel, foundLocLabel=modelResource.xlinkLabel)
308
- # xlinkLabel checks
309
- if isinstance(modelResource, ModelResource):
310
- if re.match(r"[^a-zA-Z0-9_-]", modelResource.xlinkLabel):
311
- modelXbrl.error("SBR.NL.3.2.11.03",
312
- _("@xlink:label names MUST use a-zA-Z0-9_- characters only: %(xlinkLabel)s"),
313
- modelObject=modelResource, xlinkLabel=modelResource.xlinkLabel)
314
- elif modelDocument.targetNamespace: # SCHEMA with targetNamespace
315
- # check for unused imports
316
- for referencedDocument in modelDocument.referencesDocument.keys():
317
- if (referencedDocument.type == ModelDocument.Type.SCHEMA and
318
- referencedDocument.targetNamespace not in {XbrlConst.xbrli, XbrlConst.link} and
319
- referencedDocument.targetNamespace not in val.referencedNamespaces):
320
- modelXbrl.error("SBR.NL.2.2.0.15",
321
- _("A schema import schemas of which no content is being addressed: %(importedFile)s"),
322
- modelObject=modelDocument, importedFile=referencedDocument.basename)
323
- if modelDocument.targetNamespace != modelDocument.targetNamespace.lower():
324
- modelXbrl.error("SBR.NL.3.2.3.02",
325
- _("Namespace URI's MUST be lower case: %(namespaceURI)s"),
326
- modelObject=modelDocument, namespaceURI=modelDocument.targetNamespace)
327
- if len(modelDocument.targetNamespace) > 255:
328
- modelXbrl.error("SBR.NL.3.2.3.03",
329
- _("Namespace URI's MUST NOT be longer than 255 characters: %(namespaceURI)s"),
330
- modelObject=modelDocument, namespaceURI=modelDocument.targetNamespace)
331
- if re.match(r"[^a-z0-9_/-]", modelDocument.targetNamespace):
332
- modelXbrl.error("SBR.NL.3.2.3.04",
333
- _("Namespace URI's MUST use only signs from a-z0-9_-/: %(namespaceURI)s"),
334
- modelObject=modelDocument, namespaceURI=modelDocument.targetNamespace)
335
- if not modelDocument.targetNamespace.startswith('http://www.nltaxonomie.nl'):
336
- modelXbrl.error("SBR.NL.3.2.3.05",
337
- _("Namespace URI's MUST start with 'http://www.nltaxonomie.nl': %(namespaceURI)s"),
338
- modelObject=modelDocument, namespaceURI=modelDocument.targetNamespace)
339
- namespacePrefix = XmlUtil.xmlnsprefix(modelDocument.xmlRootElement, modelDocument.targetNamespace)
340
- if not namespacePrefix:
341
- modelXbrl.error("SBR.NL.3.2.4.01",
342
- _("TargetNamespaces MUST have a prefix: %(namespaceURI)s"),
343
- modelObject=modelDocument, namespaceURI=modelDocument.targetNamespace)
344
- elif namespacePrefix in val.prefixNamespace:
345
- modelXbrl.error("SBR.NL.3.2.4.02",
346
- _("Namespace prefix MUST be unique within the NT but prefix '%(prefix)s' is used by both %(namespaceURI)s and %(namespaceURI2)s."),
347
- modelObject=modelDocument, prefix=namespacePrefix,
348
- namespaceURI=modelDocument.targetNamespace, namespaceURI2=val.prefixNamespace[namespacePrefix])
349
- else:
350
- val.prefixNamespace[namespacePrefix] = modelDocument.targetNamespace
351
- val.namespacePrefix[modelDocument.targetNamespace] = namespacePrefix
352
- if namespacePrefix in {"xsi", "xsd", "xs", "xbrli", "link", "xlink", "xbrldt", "xbrldi", "gen", "xl"}:
353
- modelXbrl.error("SBR.NL.3.2.4.03",
354
- _("Namespace prefix '%(prefix)s' reserved by organizations for international specifications is used %(namespaceURI)s."),
355
- modelObject=modelDocument, prefix=namespacePrefix, namespaceURI=modelDocument.targetNamespace)
356
- if len(namespacePrefix) > 20:
357
- modelXbrl.warning("SBR.NL.3.2.4.06",
358
- _("Namespace prefix '%(prefix)s' SHOULD not exceed 20 characters %(namespaceURI)s."),
359
- modelObject=modelDocument, prefix=namespacePrefix, namespaceURI=modelDocument.targetNamespace)
360
- # check every non-targetnamespace prefix against its schema
361
- requiredLinkrole = None # only set for extension taxonomies
362
-
363
- for elt in modelDocument.xmlRootElement.iter():
364
- if isinstance(elt, ModelObject):
365
- xlinkType = elt.get("{http://www.w3.org/1999/xlink}type")
366
- xlinkRole = elt.get("{http://www.w3.org/1999/xlink}role")
367
- if elt.tag in ("{http://www.xbrl.org/2003/linkbase}arcroleRef", "{http://www.xbrl.org/2003/linkbase}roleRef"):
368
- if elt.tag =="{http://www.xbrl.org/2003/linkbase}arcroleRef": # corrected merge of pre-plugin code per LOGIUS
369
- for attrName, errCode in (("{http://www.w3.org/1999/xlink}arcrole","SBR.NL.2.3.2.05"),("{http://www.w3.org/1999/xlink}role","SBR.NL.2.3.2.06")):
370
- if elt.get(attrName):
371
- val.modelXbrl.error(errCode,
372
- _("Arcrole %(refURI)s arcroleRef %(xlinkHref)s must not have an %(attribute)s attribute"),
373
- modelObject=elt, refURI=elt.get("arcroleURI"),
374
- xlinkHref=elt.get("{http://www.w3.org/1999/xlink}href"), attribute=attrName,
375
- messageCodes=("SBR.NL.2.3.2.05", "SBR.NL.2.3.2.06"))
376
- elif elt.tag == "{http://www.xbrl.org/2003/linkbase}roleRef": # corrected merge of pre-plugin code per LOGIUS
377
- for attrName, errCode in (("{http://www.w3.org/1999/xlink}arcrole","SBR.NL.2.3.10.09"),("{http://www.w3.org/1999/xlink}role","SBR.NL.2.3.10.10")):
378
- if elt.get(attrName):
379
- val.modelXbrl.error(errCode,
380
- _("Role %(refURI)s roleRef %(xlinkHref)s must not have an %(attribute)s attribute"),
381
- modelObject=elt, refURI=elt.get("roleURI"),
382
- xlinkHref=elt.get("{http://www.w3.org/1999/xlink}href"), attribute=attrName,
383
- messageCodes=("SBR.NL.2.3.10.09", "SBR.NL.2.3.10.10"))
384
- if not xlinkType:
385
- val.modelXbrl.error("SBR.NL.2.3.0.01",
386
- _("Xlink 1.1 simple type is not allowed (xlink:type is missing)"),
387
- modelObject=elt)
388
- if xlinkType == "resource":
389
- if elt.localName in ("label", "reference"):
390
- if not XbrlConst.isStandardRole(xlinkRole):
391
- val.modelXbrl.error("SBR.NL.2.3.10.13",
392
- _("Extended link %(element)s must have a standard xlink:role attribute (%(xlinkRole)s)"),
393
- modelObject=elt, element=elt.elementQname, xlinkRole=xlinkRole)
394
- if elt.localName == "reference": # look for custom reference parts
395
- for linkPart in elt.iterchildren():
396
- if linkPart.namespaceURI not in val.disclosureSystem.baseTaxonomyNamespaces:
397
- val.modelXbrl.error("SBR.NL.2.2.5.01",
398
- _("Link part %(element)s is not authorized"),
399
- modelObject=linkPart, element=linkPart.elementQname)
400
- # corrected merge of pre-plugin code per LOGIUS
401
- if not XbrlConst.isStandardRole(xlinkRole):
402
- modelsRole = val.modelXbrl.roleTypes.get(xlinkRole)
403
- if (modelsRole is None or len(modelsRole) == 0 or
404
- modelsRole[0].modelDocument.targetNamespace not in val.disclosureSystem.standardTaxonomiesDict):
405
- val.modelXbrl.error("SBR.NL.2.3.10.14",
406
- _("Resource %(xlinkLabel)s role %(role)s is not a standard taxonomy role"),
407
- modelObject=elt, xlinkLabel=elt.get("{http://www.w3.org/1999/xlink}label"), role=xlinkRole, element=elt.qname,
408
- roleDefinition=val.modelXbrl.roleTypeDefinition(xlinkRole))
409
- if elt.localName == "reference":
410
- for child in elt.iterdescendants():
411
- if isinstance(child,ModelObject) and child.namespaceURI.startswith("http://www.xbrl.org") and child.namespaceURI != "http://www.xbrl.org/2006/ref":
412
- val.modelXbrl.error("SBR.NL.2.3.3.01",
413
- _("Reference %(xlinkLabel)s has unauthorized part element %(element)s"),
414
- modelObject=elt, xlinkLabel=elt.get("{http://www.w3.org/1999/xlink}label"),
415
- element=qname(child))
416
- id = elt.get("id")
417
- if not id:
418
- val.modelXbrl.error("SBR.NL.2.3.3.02",
419
- _("Reference %(xlinkLabel)s is missing an id attribute"),
420
- modelObject=elt, xlinkLabel=elt.get("{http://www.w3.org/1999/xlink}label"))
421
- elif id in val.DTSreferenceResourceIDs:
422
- val.modelXbrl.error("SBR.NL.2.3.3.03",
423
- _("Reference %(xlinkLabel)s has duplicated id %(id)s also in linkbase %(otherLinkbase)s"),
424
- modelObject=elt, xlinkLabel=elt.get("{http://www.w3.org/1999/xlink}label"),
425
- id=id, otherLinkbase=val.DTSreferenceResourceIDs[id])
426
- else:
427
- val.DTSreferenceResourceIDs[id] = modelDocument.basename
428
- if elt.qname not in {
429
- XbrlConst.qnLinkLabelLink: (XbrlConst.qnLinkLabel,),
430
- XbrlConst.qnLinkReferenceLink: (XbrlConst.qnLinkReference,),
431
- XbrlConst.qnLinkPresentationLink: tuple(),
432
- XbrlConst.qnLinkCalculationLink: tuple(),
433
- XbrlConst.qnLinkDefinitionLink: tuple(),
434
- XbrlConst.qnLinkFootnoteLink: (XbrlConst.qnLinkFootnote,),
435
- # XbrlConst.qnGenLink: (XbrlConst.qnGenLabel, XbrlConst.qnGenReference, val.qnSbrLinkroleorder),
436
- }.get(val.extendedElementName,(elt.qname,)): # allow non-2.1 to be ok regardless per RH 2013-03-13
437
- val.modelXbrl.error("SBR.NL.2.3.0.11",
438
- _("Resource element %(element)s may not be contained in a linkbase with %(element2)s"),
439
- modelObject=elt, element=elt.qname, element2=val.extendedElementName)
440
- elif xlinkType == "extended":
441
- if xlinkRole is None: # no @role on extended link
442
- val.modelXbrl.error("SBR.NL.2.3.10.13",
443
- _("Extended link %(element)s must have an xlink:role attribute"),
444
- modelObject=elt, element=elt.elementQname)
445
- if not val.extendedElementName:
446
- val.extendedElementName = elt.qname
447
- elif val.extendedElementName != elt.qname:
448
- val.modelXbrl.error("SBR.NL.2.3.0.11",
449
- _("Extended element %(element)s must be the same as %(element2)s"),
450
- modelObject=elt, element=elt.qname, element2=val.extendedElementName)
451
- elif xlinkType == "locator":
452
- if elt.qname != XbrlConst.qnLinkLoc:
453
- val.modelXbrl.error("SBR.NL.2.3.0.11",
454
- _("Loc element %(element)s may not be contained in a linkbase with %(element2)s"),
455
- modelObject=elt, element=elt.qname, element2=val.extendedElementName)
456
- elif xlinkType == "arc":
457
- if elt.namespaceURI == XbrlConst.link:
458
- if elt.localName == "presentationArc" and not elt.get("order"):
459
- val.modelXbrl.error("SBR.NL.2.3.4.04",
460
- _("PresentationArc from %(xlinkFrom)s to %(xlinkTo)s must have an order"),
461
- modelObject=elt,
462
- xlinkFrom=elt.get("{http://www.w3.org/1999/xlink}from"),
463
- xlinkTo=elt.get("{http://www.w3.org/1999/xlink}to"),
464
- conceptFrom=arcFromConceptQname(elt),
465
- conceptTo=arcToConceptQname(elt))
466
- if elt.namespaceURI == XbrlConst.link:
467
- arcrole = elt.get("{http://www.w3.org/1999/xlink}arcrole")
468
- if elt.localName == "definitionArc":
469
- if arcrole in (XbrlConst.essenceAlias, XbrlConst.similarTuples, XbrlConst.requiresElement):
470
- val.modelXbrl.error({XbrlConst.essenceAlias: "SBR.NL.2.3.2.02",
471
- XbrlConst.similarTuples: "SBR.NL.2.3.2.03",
472
- XbrlConst.requiresElement: "SBR.NL.2.3.2.04"}[arcrole],
473
- _("DefinitionArc from %(xlinkFrom)s to %(xlinkTo)s has unauthorized arcrole %(arcrole)s"),
474
- modelObject=elt,
475
- xlinkFrom=elt.get("{http://www.w3.org/1999/xlink}from"),
476
- xlinkTo=elt.get("{http://www.w3.org/1999/xlink}to"),
477
- arcrole=arcrole,
478
- messageCodes=("SBR.NL.2.3.2.02", "SBR.NL.2.3.2.03", "SBR.NL.2.3.2.04"))
479
- elif elt.localName == "referenceArc":
480
- if elt.get("order"):
481
- val.modelXbrl.error("SBR.NL.2.3.3.05",
482
- _("ReferenceArc from %(xlinkFrom)s to %(xlinkTo)s has an order"),
483
- modelObject=elt,
484
- xlinkFrom=elt.get("{http://www.w3.org/1999/xlink}from"),
485
- xlinkTo=elt.get("{http://www.w3.org/1999/xlink}to"))
486
- if elt.get("use") == "prohibited" and elt.getparent().tag in (
487
- "{http://www.xbrl.org/2003/linkbase}presentationLink",
488
- "{http://www.xbrl.org/2003/linkbase}labelLink",
489
- "{http://xbrl.org/2008/generic}link",
490
- "{http://www.xbrl.org/2003/linkbase}referenceLink"):
491
- val.modelXbrl.error("SBR.NL.2.3.0.10",
492
- _("%(arc)s must not contain use='prohibited'"),
493
- modelObject=elt, arc=elt.getparent().qname)
494
- if elt.qname not in {
495
- XbrlConst.qnLinkLabelLink: (XbrlConst.qnLinkLabelArc,),
496
- XbrlConst.qnLinkReferenceLink: (XbrlConst.qnLinkReferenceArc,),
497
- XbrlConst.qnLinkPresentationLink: (XbrlConst.qnLinkPresentationArc,),
498
- XbrlConst.qnLinkCalculationLink: (XbrlConst.qnLinkCalculationArc,),
499
- XbrlConst.qnLinkDefinitionLink: (XbrlConst.qnLinkDefinitionArc,),
500
- XbrlConst.qnLinkFootnoteLink: (XbrlConst.qnLinkFootnoteArc,),
501
- # XbrlConst.qnGenLink: (XbrlConst.qnGenArc,),
502
- }.get(val.extendedElementName, (elt.qname,)): # allow non-2.1 to be ok regardless per RH 2013-03-13
503
- val.modelXbrl.error("SBR.NL.2.3.0.11",
504
- _("Arc element %(element)s may not be contained in a linkbase with %(element2)s"),
505
- modelObject=elt, element=elt.qname, element2=val.extendedElementName)
506
- if elt.qname == XbrlConst.qnLinkLabelArc and elt.get("order"):
507
- val.modelXbrl.error("SBR.NL.2.3.8.08",
508
- _("labelArc may not be contain order (%(order)s)"),
509
- modelObject=elt, order=elt.get("order"))
510
-
511
- xmlLang = elt.get("{http://www.w3.org/XML/1998/namespace}lang")
512
- if val.validateXmlLang and xmlLang is not None:
513
- if not val.disclosureSystem.xmlLangPattern.match(xmlLang): # corrected merge of pre-plugin code per LOGIUS
514
- val.modelXbrl.error("SBR.NL.2.3.8.01" if xmlLang.startswith('nl') else "SBR.NL.2.3.8.02" if xmlLang.startswith('en') else "arelle:langError",
515
- _("Element %(element)s %(xlinkLabel)s has unauthorized xml:lang='%(lang)s'"),
516
- modelObject=elt, element=elt.qname,
517
- xlinkLabel=elt.get("{http://www.w3.org/1999/xlink}label"),
518
- lang=elt.get("{http://www.w3.org/XML/1998/namespace}lang"),
519
- messageCodes=("SBR.NL.2.3.8.01", "SBR.NL.2.3.8.02", "arelle:langError"))
520
- # check attributes for prefixes and xmlns
521
- val.valUsedPrefixes.add(elt.prefix)
522
- if elt.namespaceURI not in val.disclosureSystem.baseTaxonomyNamespaces:
523
- val.modelXbrl.error("SBR.NL.2.2.0.20",
524
- _("%(fileType)s element %(element)s must not have custom namespace %(namespace)s"),
525
- modelObject=elt, element=elt.qname,
526
- fileType="schema" if isSchema else "linkbase" ,
527
- namespace=elt.namespaceURI)
528
- for attrTag, attrValue in elt.items():
529
- prefix, ns, localName = XmlUtil.clarkNotationToPrefixNsLocalname(elt, attrTag, isAttribute=True)
530
- if prefix: # don't count unqualified prefixes for using default namespace
531
- val.valUsedPrefixes.add(prefix)
532
- if ns and ns not in val.disclosureSystem.baseTaxonomyNamespaces:
533
- val.modelXbrl.error("SBR.NL.2.2.0.20",
534
- _("%(fileType)s element %(element)s must not have %(prefix)s:%(localName)s"),
535
- modelObject=elt, element=elt.qname,
536
- fileType="schema" if isSchema else "linkbase" ,
537
- prefix=prefix, localName=localName)
538
- if isSchema and localName in ("base", "ref", "substitutionGroup", "type"):
539
- valuePrefix, sep, valueName = attrValue.partition(":")
540
- if sep:
541
- val.valUsedPrefixes.add(valuePrefix)
542
- # check for xmlns on a non-root element
543
- parentElt = elt.getparent()
544
- if parentElt is not None:
545
- for prefix, ns in elt.nsmap.items():
546
- if prefix not in parentElt.nsmap or parentElt.nsmap[prefix] != ns:
547
- val.modelXbrl.error(("SBR.NL.2.2.0.19" if isSchema else "SBR.NL.2.3.1.01"),
548
- _("%(fileType)s element %(element)s must not have xmlns:%(prefix)s"),
549
- modelObject=elt, element=elt.qname,
550
- fileType="schema" if isSchema else "linkbase" ,
551
- prefix=prefix,
552
- messageCodes=("SBR.NL.2.2.0.19", "SBR.NL.2.3.1.01"))
553
-
554
- if elt.localName == "roleType" and not elt.get("id"):
555
- val.modelXbrl.error("SBR.NL.2.3.10.11",
556
- _("RoleType %(roleURI)s missing id attribute"),
557
- modelObject=elt, roleURI=elt.get("roleURI"))
558
- elif elt.localName == "loc" and elt.get("{http://www.w3.org/1999/xlink}role"):
559
- val.modelXbrl.error("SBR.NL.2.3.10.08",
560
- _("Loc %(xlinkLabel)s has unauthorized role attribute"),
561
- modelObject=elt, xlinkLabel=elt.get("{http://www.w3.org/1999/xlink}label"))
562
- elif elt.localName == "documentation":
563
- val.modelXbrl.error("SBR.NL.2.3.10.12" if elt.namespaceURI == XbrlConst.link else "SBR.NL.2.2.11.02",
564
- _("Documentation element must not be used: %(value)s"),
565
- modelObject=elt, value=XmlUtil.text(elt),
566
- messageCodes=("SBR.NL.2.3.10.12", "SBR.NL.2.2.11.02"))
567
- if elt.localName == "linkbase":
568
- schemaLocation = elt.get("{http://www.w3.org/2001/XMLSchema-instance}schemaLocation")
569
- if schemaLocation:
570
- schemaLocations = schemaLocation.split()
571
- for sl in (XbrlConst.link, XbrlConst.xlink):
572
- if sl in schemaLocations:
573
- val.modelXbrl.error("SBR.NL.2.3.0.07",
574
- _("Linkbase element must not have schemaLocation entry for %(schemaLocation)s"),
575
- modelObject=elt, schemaLocation=sl)
576
- for attrName, errCode in (("id", "SBR.NL.2.3.10.04"),
577
- ("{http://www.w3.org/2001/XMLSchema-instance}nil", "SBR.NL.2.3.10.05"),
578
- ("{http://www.w3.org/2001/XMLSchema-instance}noNamespaceSchemaLocation", "SBR.NL.2.3.10.06"),
579
- ("{http://www.w3.org/2001/XMLSchema-instance}type", "SBR.NL.2.3.10.07")):
580
- if elt.get(attrName) is not None:
581
- val.modelXbrl.error(errCode,
582
- _("Linkbase element %(element)s must not have attribute %(attribute)s"),
583
- modelObject=elt, element=elt.qname, attribute=attrName,
584
- messageCodes=("SBR.NL.2.3.10.04", "SBR.NL.2.3.10.05", "SBR.NL.2.3.10.06", "SBR.NL.2.3.10.07"))
585
- for attrName, errCode in (("{http://www.w3.org/1999/xlink}actuate", "SBR.NL.2.3.10.01"),
586
- ("{http://www.w3.org/1999/xlink}show", "SBR.NL.2.3.10.02"),
587
- ("{http://www.w3.org/1999/xlink}title", "SBR.NL.2.3.10.03")):
588
- if elt.get(attrName) is not None:
589
- val.modelXbrl.error(errCode,
590
- _("Linkbase element %(element)s must not have attribute xlink:%(attribute)s"),
591
- modelObject=elt, element=elt.qname, attribute=attrName,
592
- messageCodes=("SBR.NL.2.3.10.01", "SBR.NL.2.3.10.02", "SBR.NL.2.3.10.03"))
593
- elif isinstance(elt,ModelComment): # comment node
594
- if elt.itersiblings(preceding=True): # corrected merge of pre-plugin code per LOGIUS
595
- val.modelXbrl.error("SBR.NL.2.2.0.05" if isSchema else "SBR.NL.2.3.0.05",
596
- _('%(fileType)s must have only one comment node before schema element: "%(value)s"'),
597
- modelObject=elt, fileType=modelDocument.gettype().title(), value=elt.text,
598
- messageCodes=("SBR.NL.2.2.0.05", "SBR.NL.2.3.0.05"))
599
-
600
- # check folder names
601
- if modelDocument.filepathdir.startswith(modelXbrl.uriDir):
602
- partnerPrefix = None
603
- pathDir = modelDocument.filepathdir[len(modelXbrl.uriDir) + 1:].replace("\\", "/")
604
- lastPathSegment = None
605
- for pathSegment in pathDir.split("/"):
606
- if pathSegment.lower() != pathSegment:
607
- modelXbrl.error("SBR.NL.3.2.1.02",
608
- _("Folder names must be in lower case: %(folder)s"),
609
- modelObject=modelDocument, folder=pathSegment)
610
- if len(pathSegment) >= 15 :
611
- modelXbrl.error("SBR.NL.3.2.1.03",
612
- _("Folder names must be less than 15 characters: %(folder)s"),
613
- modelObject=modelDocument, folder=pathSegment)
614
- if pathSegment in ("bd", "kvk", "cbs"):
615
- partnerPrefix = pathSegment + '-'
616
- lastPathSegment = pathSegment
617
- if modelDocument.basename.lower() != modelDocument.basename:
618
- modelXbrl.error("SBR.NL.3.2.1.05",
619
- _("File names must be in lower case: %(file)s"),
620
- modelObject=modelDocument, file=modelDocument.basename)
621
- if partnerPrefix and not modelDocument.basename.startswith(partnerPrefix):
622
- modelXbrl.error("SBR.NL.3.2.1.14",
623
- "NT Partner DTS files MUST start with %(partnerPrefix)s consistently: %(filename)s",
624
- modelObject=modelDocument, partnerPrefix=partnerPrefix, filename=modelDocument.uri)
625
- if modelDocument.type == ModelDocument.Type.SCHEMA:
626
- if modelDocument.targetNamespace:
627
- nsParts = modelDocument.targetNamespace.split("/")
628
- # [0] = https, [1] = // [2] = nl.taxonomie [3] = year or version
629
- nsYrOrVer = nsParts[3]
630
- requiredNamespace = "http://www.nltaxonomie.nl/" + nsYrOrVer + "/" + pathDir + "/" + modelDocument.basename[:-4]
631
- requiredLinkrole = "http://www.nltaxonomie.nl/" + nsYrOrVer + "/" + pathDir + "/"
632
- if modelDocument == modelXbrl.modelDocument: # entry point
633
- nsYr = "{year}"
634
- if '2009' <= nsParts[3] < '2020': # must be a year, use as year
635
- nsYr = nsParts[3]
636
- else: # look for year in parts of basename of required namespace
637
- for nsPart in nsParts:
638
- for baseNamePart in nsPart.split('-'):
639
- if '2009' <= baseNamePart < '2020':
640
- nsYr = baseNamePart
641
- break
642
- if not requiredNamespace.endswith('-' + nsYr):
643
- requiredNamespace += '-' + nsYr
644
- if not modelDocument.targetNamespace.startswith(requiredNamespace):
645
- modelXbrl.error("SBR.NL.3.2.3.06",
646
- _("Namespace URI's MUST be constructed like %(requiredNamespace)s: %(namespaceURI)s"),
647
- modelObject=modelDocument, requiredNamespace=requiredNamespace, namespaceURI=modelDocument.targetNamespace)
648
- else:
649
- requiredLinkrole = ''
650
- # concept checks
651
- for modelConcept in modelDocument.xmlRootElement.iterdescendants(tag="{http://www.w3.org/2001/XMLSchema}element"):
652
- if isinstance(modelConcept, ModelConcept):
653
- # 6.7.16 name not duplicated in standard taxonomies
654
- name = modelConcept.get("name")
655
- if name:
656
- ''' removed per RH 2013-03-25
657
- substititutionGroupQname = modelConcept.substitutionGroupQname
658
- if substititutionGroupQname:
659
- if name.endswith("Member") ^ (substititutionGroupQname.localName == "domainMemberItem" and
660
- substititutionGroupQname.namespaceURI.endswith("/xbrl/xbrl-syntax-extension")):
661
- modelXbrl.error("SBR.NL.3.2.5.11",
662
- _("Concept %(concept)s must end in Member to be in sbr:domainMemberItem substitution group"),
663
- modelObject=modelConcept, concept=modelConcept.qname)
664
- if name.endswith("Domain") ^ (substititutionGroupQname.localName == "domainItem" and
665
- substititutionGroupQname.namespaceURI.endswith("/xbrl/xbrl-syntax-extension")):
666
- modelXbrl.error("SBR.NL.3.2.5.12",
667
- _("Concept %(concept)s must end in Domain to be in sbr:domainItem substitution group"),
668
- modelObject=modelConcept, concept=modelConcept.qname)
669
- if name.endswith("TypedAxis") ^ (substititutionGroupQname == XbrlConst.qnXbrldtDimensionItem and
670
- modelConcept.isTypedDimension):
671
- modelXbrl.error("SBR.NL.3.2.5.14",
672
- _("Concept %(concept)s must end in TypedAxis to be in xbrldt:dimensionItem substitution group if they represent a typed dimension"),
673
- modelObject=modelConcept, concept=modelConcept.qname)
674
- if (name.endswith("Axis") and
675
- not name.endswith("TypedAxis")) ^ (substititutionGroupQname == XbrlConst.qnXbrldtDimensionItem and
676
- modelConcept.isExplicitDimension):
677
- modelXbrl.error("SBR.NL.3.2.5.13",
678
- _("Concept %(concept)s must end in Axis to be in xbrldt:dimensionItem substitution group if they represent an explicit dimension"),
679
- modelObject=modelConcept, concept=modelConcept.qname)
680
- if name.endswith("Table") ^ (substititutionGroupQname == XbrlConst.qnXbrldtHypercubeItem):
681
- modelXbrl.error("SBR.NL.3.2.5.15",
682
- _("Concept %(concept)s must end in Table to be in xbrldt:hypercubeItem substitution group"),
683
- modelObject=modelConcept, concept=modelConcept.qname)
684
- if name.endswith("Title") ^ (substititutionGroupQname.localName == "presentationItem" and
685
- substititutionGroupQname.namespaceURI.endswith("/xbrl/xbrl-syntax-extension")):
686
- modelXbrl.error("SBR.NL.3.2.5.16",
687
- _("Concept %(concept)s must end in Title to be in sbr:presentationItem substitution group"),
688
- modelObject=modelConcept, concept=modelConcept.qname)
689
- '''
690
- if len(name) > 200:
691
- modelXbrl.error("SBR.NL.3.2.12.02" if modelConcept.isLinkPart
692
- else "SBR.NL.3.2.5.21" if (modelConcept.isItem or modelConcept.isTuple)
693
- else "SBR.NL.3.2.14.01",
694
- _("Concept %(concept)s name length %(namelength)s exceeds 200 characters"),
695
- modelObject=modelConcept, concept=modelConcept.qname, namelength=len(name))
696
- # type checks
697
- for typeType in ("simpleType", "complexType"):
698
- for modelType in modelDocument.xmlRootElement.iterdescendants(tag="{http://www.w3.org/2001/XMLSchema}" + typeType):
699
- if isinstance(modelType, ModelType):
700
- name = modelType.get("name")
701
- if name is None:
702
- name = ""
703
- if modelType.get("ref") is not None:
704
- continue # don't validate ref's here
705
- if len(name) > 200:
706
- modelXbrl.error("SBR.NL.3.2.5.21",
707
- _("Type %(type)s name length %(namelength)s exceeds 200 characters"),
708
- modelObject=modelType, type=modelType.qname, namelength=len(name))
709
- if modelType.qnameDerivedFrom and modelType.qnameDerivedFrom.namespaceURI != XbrlConst.xbrli:
710
- modelXbrl.error("SBR.NL.3.2.8.01",
711
- _("Custom datatypes MUST be a restriction from XII defined datatypes: %(type)s"),
712
- modelObject=modelType, type=modelType.qname)
713
- if re.match(r"[^a-zA-Z0-9_-]", name):
714
- modelXbrl.error("SBR.NL.3.2.8.02",
715
- _("Datatype names MUST use characters a-zA-Z0-9_- only: %(type)s"),
716
- modelObject=modelDocument, type=modelType.qname)
717
- if modelType.facets and "enumeration" in modelType.facets:
718
- if not modelType.qnameDerivedFrom == XbrlConst.qnXbrliStringItemType:
719
- modelXbrl.error("SBR.NL.3.2.13.01",
720
- _("Enumerations MUST use a restriction on xbrli:stringItemType: %(type)s"),
721
- modelObject=modelDocument, type=modelType.qname)
722
- if lastPathSegment == "entrypoints":
723
- if not modelDocument.xmlRootElement.id:
724
- modelXbrl.error("SBR.NL.2.2.0.23",
725
- _("xs:schema/@id MUST be present in schema files in the reports/{NT partner}/entrypoints/ folder"),
726
- modelObject=modelDocument)
727
-
728
-
729
- # check for idObject conflicts
730
- for modelObject in modelDocument.xmlRootElement.iter():
731
- if isinstance(modelObject,ModelObject):
732
- id = modelObject.id
733
- if id:
734
- if id in val.idObjects:
735
- modelXbrl.error("SBR.NL.3.2.6.01",
736
- _("ID %(id)s must be unique in the DTS but is present on two elements."),
737
- modelObject=(modelObject, val.idObjects[id]), id=id)
738
- else:
739
- val.idObjects[id] = modelObject
740
-
741
-
742
- for roleURI, modelRoleTypes in modelXbrl.roleTypes.items():
743
- if not roleURI.startswith("http://www.xbrl.org"):
744
- usedOns = set.union(*[modelRoleType.usedOns for modelRoleType in modelRoleTypes])
745
- # check roletypes for linkroles (only)
746
- if usedOns & {XbrlConst.qnLinkPresentationLink, XbrlConst.qnLinkCalculationLink, XbrlConst.qnLinkDefinitionLink,
747
- XbrlConst.qnLinkLabel, XbrlConst.qnLinkReference, XbrlConst.qnLinkFootnote}:
748
- if len(modelRoleTypes) > 1:
749
- modelXbrl.error("SBR.NL.3.2.9.01",
750
- _("Linkrole URI's MUST be unique in the NT: %(linkrole)s"),
751
- modelObject=modelRoleTypes, linkrole=roleURI)
752
- if roleURI.lower() != roleURI:
753
- modelXbrl.error("SBR.NL.3.2.9.02",
754
- _("Linkrole URI's MUST be in lowercase: %(linkrole)s"),
755
- modelObject=modelRoleTypes, linkrole=roleURI)
756
- if re.match(r"[^a-z0-9_/-]", roleURI):
757
- modelXbrl.error("SBR.NL.3.2.9.03",
758
- _("Linkrole URI's MUST use characters a-z0-9_-/ only: %(linkrole)s"),
759
- modelObject=modelRoleTypes, linkrole=roleURI)
760
- if len(roleURI) > 255:
761
- modelXbrl.error("SBR.NL.3.2.9.04",
762
- _("Linkrole URI's MUST NOT be longer than 255 characters, length is %(len)s: %(linkrole)s"),
763
- modelObject=modelRoleTypes, len=len(roleURI), linkrole=roleURI)
764
- ''' removed per RH 2013-03-13 e-mail
765
- if not roleURI.startswith('http://www.nltaxonomie.nl'):
766
- modelXbrl.error("SBR.NL.3.2.9.05",
767
- _("Linkrole URI's MUST start with 'http://www.nltaxonomie.nl': %(linkrole)s"),
768
- modelObject=modelRoleTypes, linkrole=roleURI)
769
- if (requiredLinkrole and
770
- not roleURI.startswith(requiredLinkrole) and
771
- re.match(r".*(domain$|axis$|table$|lineitem$)", roleURI)):
772
- modelXbrl.error("SBR.NL.3.2.9.06",
773
- _("Linkrole URI's MUST have the following construct: http://www.nltaxonomie.nl / {folder path} / {functional name} - {domain or axis or table or lineitem}: %(linkrole)s"),
774
- modelObject=modelRoleTypes, linkrole=roleURI)
775
- '''
776
- for modelRoleType in modelRoleTypes:
777
- if len(modelRoleType.id) > 255:
778
- modelXbrl.error("SBR.NL.3.2.10.02",
779
- _("Linkrole @id MUST NOT exceed 255 characters, length is %(length)s: %(linkroleID)s"),
780
- modelObject=modelRoleType, length=len(modelRoleType.id), linkroleID=modelRoleType.id)
781
- partnerPrefix = modelRoleTypes[0].modelDocument.basename.split('-')
782
- if partnerPrefix: # first element before dash is prefix
783
- urnPartnerLinkroleStart = "urn:{0}:linkrole:".format(partnerPrefix[0])
784
- if not roleURI.startswith(urnPartnerLinkroleStart):
785
- modelXbrl.error("SBR.NL.3.2.9.10",
786
- _("Linkrole MUST start with urn:{NT partner code}:linkrole:, \nexpecting: %(expectedStart)s..., \nfound: %(linkrole)s"),
787
- modelObject=modelRoleType, expectedStart=urnPartnerLinkroleStart, linkrole=roleURI)
788
-
789
- if modelDocument.type in (ModelDocument.Type.SCHEMA, ModelDocument.Type.LINKBASE):
790
- # check namespaces are used
791
- for prefix, ns in modelDocument.xmlRootElement.nsmap.items():
792
- if ((prefix not in val.valUsedPrefixes) and
793
- (modelDocument.type != ModelDocument.Type.SCHEMA or ns != modelDocument.targetNamespace)):
794
- modelXbrl.error("SBR.NL.2.2.0.11" if modelDocument.type == ModelDocument.Type.SCHEMA else "SBR.NL.2.3.0.08",
795
- _('%(docType)s namespace declaration "%(declaration)s" is not used'),
796
- modelObject=modelDocument, docType=modelDocument.gettype().title(),
797
- declaration=("xmlns" + (":" + prefix if prefix else "") + "=" + ns))
798
-
799
- del val.valUsedPrefixes