{"id":14661,"date":"2025-04-13T09:24:37","date_gmt":"2025-04-13T00:24:37","guid":{"rendered":"https:\/\/www.sambuichi.jp\/?p=14661"},"modified":"2025-04-14T17:46:20","modified_gmt":"2025-04-14T08:46:20","slug":"structured-csv-expressing-xml-hierarchies-in-a-single-sheet","status":"publish","type":"post","link":"https:\/\/www.sambuichi.jp\/?p=14661&lang=en","title":{"rendered":"Structured CSV: Expressing XML Hierarchies in a Single Sheet"},"content":{"rendered":"<p>Views: 13<\/p><div id=\"header\">\n<h1>Structured CSV: Expressing XML Hierarchies in a Single Sheet<\/h1>\n<div class=\"details\">\n<span id=\"author\" class=\"author\">Nobuyuki Sambuichi<\/span><br \/>\n<span id=\"revdate\">2025-04-13<\/span>\n<\/div>\n<\/div>\n<div id=\"content\">\n<div id=\"preamble\">\n<div class=\"sectionbody\">\n<div class=\"quoteblock abstract\">\n<blockquote><p>\nStructured CSV is a standards-based format derived from the xBRL-CSV specification, enabling complex hierarchical data to be recorded in a flat, tabular form. It is not a simple dump of relational tables. Instead, it uses structured conventions and a metadata-driven approach to express multi-level business documents \u2014 such as invoices or journal entries \u2014 in a single CSV sheet.\n<\/p><\/blockquote>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_based_on_xbrl_csv\">1. Based on xBRL-CSV<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Structured CSV follows the xBRL-CSV syntax model, where:<\/p>\n<\/div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p>A <code>CSV<\/code> file holds the fact data \u2014 one row per fact.<\/p>\n<\/li>\n<li>\n<p>A <code>JSON<\/code> metadata file defines the table structure, the dimensions and members for each column, and the mapping to the XBRL taxonomy.<\/p>\n<\/li>\n<li>\n<p>Each column is explicitly defined as a <code>dimension<\/code>, <code>concept<\/code>, or a <code>unit<\/code>.<\/p>\n<\/li>\n<li>\n<p>Hierarchical records (e.g. header and detail) are flattened but grouped using dimension-based sequence numbers.<\/p>\n<\/li>\n<\/ul>\n<\/div>\n<div class=\"paragraph\">\n<p>This format is ideal for encoding any data that would traditionally be captured in XML, such as an XBRL GL instance, but with the compactness and simplicity of CSV.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_metadata_structure_and_semantics\">2. Metadata: Structure and Semantics<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>The metadata JSON file:<\/p>\n<\/div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p>Declares the <code>taxonomy<\/code> schema URL (usually an <code>.xsd<\/code> file).<\/p>\n<\/li>\n<li>\n<p>Maps each CSV column to a corresponding concept in the taxonomy (e.g. <code>gl-cor:entryNumber<\/code>, <code>gl-cor:amount<\/code>).<\/p>\n<\/li>\n<li>\n<p>Specifies whether a column is a <code>dimension<\/code>, <code>member<\/code>, or a core concept.<\/p>\n<\/li>\n<li>\n<p>Enables multilingual interpretation \u2014 column names and definitions can be retrieved in local language using the <code>label<\/code> linkbases of the taxonomy.<\/p>\n<\/li>\n<\/ul>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_hierarchy_in_flat_rows\">3. Hierarchy in Flat Rows<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Structured CSV can represent header-detail relationships \u2014 or even deeper nested structures \u2014 by using integer-based dimension values:<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-csv\" data-lang=\"csv\">entryHeader,entryDetail,entryNumber,lineNumber,amount\r\n1,,INV-001,,\r\n1,1,,1,100.00\r\n1,2,,2,-100.00\r\n2,,INV-002,,\r\n2,3,,1,300.00<\/code><\/pre>\n<\/div>\n<\/div>\n<table class=\"tableblock frame-all grid-all stretch\">\n<caption class=\"title\">Table 1. Table: Flattened CSV representing a hierarchical structure<\/caption>\n<colgroup>\n<col style=\"width: 16.6666%;\">\n<col style=\"width: 16.6666%;\">\n<col style=\"width: 33.3333%;\">\n<col style=\"width: 16.6666%;\">\n<col style=\"width: 16.6669%;\">\n<\/colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-center valign-top\">entryHeader<\/th>\n<th class=\"tableblock halign-center valign-top\">entryDetail<\/th>\n<th class=\"tableblock halign-left valign-top\">entryNumber<\/th>\n<th class=\"tableblock halign-center valign-top\">lineNumber<\/th>\n<th class=\"tableblock halign-right valign-top\">amount<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-center valign-top\">\n<p class=\"tableblock\">1<\/p>\n<\/td>\n<td class=\"tableblock halign-center valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">INV-001<\/p>\n<\/td>\n<td class=\"tableblock halign-center valign-top\"><\/td>\n<td class=\"tableblock halign-right valign-top\"><\/td>\n<\/tr>\n<tr>\n<td class=\"tableblock halign-center valign-top\">\n<p class=\"tableblock\">1<\/p>\n<\/td>\n<td class=\"tableblock halign-center valign-top\">\n<p class=\"tableblock\">1<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-center valign-top\">\n<p class=\"tableblock\">1<\/p>\n<\/td>\n<td class=\"tableblock halign-right valign-top\">\n<p class=\"tableblock\">100.00<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td class=\"tableblock halign-center valign-top\">\n<p class=\"tableblock\">1<\/p>\n<\/td>\n<td class=\"tableblock halign-center valign-top\">\n<p class=\"tableblock\">2<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-center valign-top\">\n<p class=\"tableblock\">2<\/p>\n<\/td>\n<td class=\"tableblock halign-right valign-top\">\n<p class=\"tableblock\">250.00<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td class=\"tableblock halign-center valign-top\">\n<p class=\"tableblock\">2<\/p>\n<\/td>\n<td class=\"tableblock halign-center valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">INV-002<\/p>\n<\/td>\n<td class=\"tableblock halign-center valign-top\"><\/td>\n<td class=\"tableblock halign-right valign-top\"><\/td>\n<\/tr>\n<tr>\n<td class=\"tableblock halign-center valign-top\">\n<p class=\"tableblock\">2<\/p>\n<\/td>\n<td class=\"tableblock halign-center valign-top\">\n<p class=\"tableblock\">1<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-center valign-top\">\n<p class=\"tableblock\">1<\/p>\n<\/td>\n<td class=\"tableblock halign-right valign-top\">\n<p class=\"tableblock\">300.00<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<div class=\"ulist\">\n<ul>\n<li>\n<p><code>entryHeader<\/code> and <code>entryDetail<\/code> are sequence numbers (integers).<\/p>\n<\/li>\n<li>\n<p>Rows with only <code>entryHeader<\/code> populated are header-level facts.<\/p>\n<\/li>\n<li>\n<p>Rows with <code>entryDetail<\/code> populated are detail-level facts grouped under the most recent header.<\/p>\n<\/li>\n<\/ul>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_graphical_illustration\">4. Graphical Illustration<\/h2>\n<div class=\"sectionbody\">\n<div class=\"imageblock kroki\">\n<div class=\"content\">\n<img decoding=\"async\" src=\"https:\/\/kroki.io\/plantuml\/svg\/eNqVziEPgzAQhmF_v-KCL7leMzON6AwSNVO2ExBoE1YE_x7oRoBkE3PfJ57kDXUrj4iZ-DhMVtxThivqu0-_HPt6_beyUkQ6Q_dCqyEcTSHRNV0yXeNlI8t1fRh9XCZRTpRw8QPzGfOO-bJjhrPecvlrLr9z-d9cc8g1AFajUmv4ZzBYTsPADAr0YdQ=\" alt=\"Diagram\">\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>This diagram illustrates how <code>entryDetail<\/code> rows are logically grouped under <code>entryHeader<\/code> using the sequence numbers, even though all data resides in a single flat CSV file.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_example_for_a_customer_invoice\">5. Example for a Customer Invoice<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>The following is an example of a structured CSV representing a customer invoice. It includes both header and detail facts flattened into a single sheet, using sequence numbers to distinguish between <code>entryHeader<\/code> and <code>entryDetail<\/code>.<\/p>\n<\/div>\n<table class=\"tableblock frame-all grid-all stretch\">\n<colgroup>\n<col style=\"width: 5.5555%;\">\n<col style=\"width: 5.5555%;\">\n<col style=\"width: 5.5555%;\">\n<col style=\"width: 5.5555%;\">\n<col style=\"width: 5.5555%;\">\n<col style=\"width: 5.5555%;\">\n<col style=\"width: 5.5555%;\">\n<col style=\"width: 11.1111%;\">\n<col style=\"width: 5.5555%;\">\n<col style=\"width: 5.5555%;\">\n<col style=\"width: 5.5555%;\">\n<col style=\"width: 5.5555%;\">\n<col style=\"width: 11.1111%;\">\n<col style=\"width: 5.5555%;\">\n<col style=\"width: 5.5555%;\">\n<col style=\"width: 5.5563%;\">\n<\/colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-center valign-top\">accountingEntries<\/th>\n<th class=\"tableblock halign-center valign-top\">entryHeader<\/th>\n<th class=\"tableblock halign-center valign-top\">entryDetail<\/th>\n<th class=\"tableblock halign-center valign-top\">entriesType<\/th>\n<th class=\"tableblock halign-center valign-top\">uniqueID<\/th>\n<th class=\"tableblock halign-center valign-top\">postedDate<\/th>\n<th class=\"tableblock halign-center valign-top\">entryNumber<\/th>\n<th class=\"tableblock halign-left valign-top\">entryComment<\/th>\n<th class=\"tableblock halign-center valign-top\">lineNumber<\/th>\n<th class=\"tableblock halign-right valign-top\">amount<\/th>\n<th class=\"tableblock halign-center valign-top\">maturityDate<\/th>\n<th class=\"tableblock halign-left valign-top\">terms<\/th>\n<th class=\"tableblock halign-left valign-top\">measurableDescription<\/th>\n<th class=\"tableblock halign-right valign-top\">measurableQuantity<\/th>\n<th class=\"tableblock halign-center valign-top\">measurableUnitOfMeasure<\/th>\n<th class=\"tableblock halign-right valign-top\">measurableCostPerUnit<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-center valign-top\">\n<p class=\"tableblock\">1<\/p>\n<\/td>\n<td class=\"tableblock halign-center valign-top\"><\/td>\n<td class=\"tableblock halign-center valign-top\"><\/td>\n<td class=\"tableblock halign-center valign-top\">\n<p class=\"tableblock\">other<\/p>\n<\/td>\n<td class=\"tableblock halign-center valign-top\">\n<p class=\"tableblock\">001<\/p>\n<\/td>\n<td class=\"tableblock halign-center valign-top\"><\/td>\n<td class=\"tableblock halign-center valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-center valign-top\"><\/td>\n<td class=\"tableblock halign-right valign-top\"><\/td>\n<td class=\"tableblock halign-center valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-right valign-top\"><\/td>\n<td class=\"tableblock halign-center valign-top\"><\/td>\n<td class=\"tableblock halign-right valign-top\"><\/td>\n<\/tr>\n<tr>\n<td class=\"tableblock halign-center valign-top\">\n<p class=\"tableblock\">1<\/p>\n<\/td>\n<td class=\"tableblock halign-center valign-top\">\n<p class=\"tableblock\">1<\/p>\n<\/td>\n<td class=\"tableblock halign-center valign-top\"><\/td>\n<td class=\"tableblock halign-center valign-top\"><\/td>\n<td class=\"tableblock halign-center valign-top\"><\/td>\n<td class=\"tableblock halign-center valign-top\">\n<p class=\"tableblock\">2005-10-14<\/p>\n<\/td>\n<td class=\"tableblock halign-center valign-top\">\n<p class=\"tableblock\">50<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Invoice: #2 Customer: Joe&#8217;s Materials<\/p>\n<\/td>\n<td class=\"tableblock halign-center valign-top\"><\/td>\n<td class=\"tableblock halign-right valign-top\"><\/td>\n<td class=\"tableblock halign-center valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-right valign-top\"><\/td>\n<td class=\"tableblock halign-center valign-top\"><\/td>\n<td class=\"tableblock halign-right valign-top\"><\/td>\n<\/tr>\n<tr>\n<td class=\"tableblock halign-center valign-top\">\n<p class=\"tableblock\">1<\/p>\n<\/td>\n<td class=\"tableblock halign-center valign-top\">\n<p class=\"tableblock\">1<\/p>\n<\/td>\n<td class=\"tableblock halign-center valign-top\">\n<p class=\"tableblock\">1<\/p>\n<\/td>\n<td class=\"tableblock halign-center valign-top\"><\/td>\n<td class=\"tableblock halign-center valign-top\"><\/td>\n<td class=\"tableblock halign-center valign-top\"><\/td>\n<td class=\"tableblock halign-center valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-center valign-top\">\n<p class=\"tableblock\">1<\/p>\n<\/td>\n<td class=\"tableblock halign-right valign-top\">\n<p class=\"tableblock\">220<\/p>\n<\/td>\n<td class=\"tableblock halign-center valign-top\">\n<p class=\"tableblock\">2005-10-21<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">7 Days Date<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">MK II Widgets with improved spatulas<\/p>\n<\/td>\n<td class=\"tableblock halign-right valign-top\">\n<p class=\"tableblock\">10<\/p>\n<\/td>\n<td class=\"tableblock halign-center valign-top\">\n<p class=\"tableblock\">EACH<\/p>\n<\/td>\n<td class=\"tableblock halign-right valign-top\">\n<p class=\"tableblock\">22<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td class=\"tableblock halign-center valign-top\">\n<p class=\"tableblock\">1<\/p>\n<\/td>\n<td class=\"tableblock halign-center valign-top\">\n<p class=\"tableblock\">1<\/p>\n<\/td>\n<td class=\"tableblock halign-center valign-top\">\n<p class=\"tableblock\">2<\/p>\n<\/td>\n<td class=\"tableblock halign-center valign-top\"><\/td>\n<td class=\"tableblock halign-center valign-top\"><\/td>\n<td class=\"tableblock halign-center valign-top\"><\/td>\n<td class=\"tableblock halign-center valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-center valign-top\">\n<p class=\"tableblock\">2<\/p>\n<\/td>\n<td class=\"tableblock halign-right valign-top\">\n<p class=\"tableblock\">25<\/p>\n<\/td>\n<td class=\"tableblock halign-center valign-top\">\n<p class=\"tableblock\">2005-10-21<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">7 Days Date<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Service Kits for MK II widgets<\/p>\n<\/td>\n<td class=\"tableblock halign-right valign-top\">\n<p class=\"tableblock\">5<\/p>\n<\/td>\n<td class=\"tableblock halign-center valign-top\">\n<p class=\"tableblock\">EACH<\/p>\n<\/td>\n<td class=\"tableblock halign-right valign-top\">\n<p class=\"tableblock\">5<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td class=\"tableblock halign-center valign-top\">\n<p class=\"tableblock\">1<\/p>\n<\/td>\n<td class=\"tableblock halign-center valign-top\">\n<p class=\"tableblock\">2<\/p>\n<\/td>\n<td class=\"tableblock halign-center valign-top\"><\/td>\n<td class=\"tableblock halign-center valign-top\"><\/td>\n<td class=\"tableblock halign-center valign-top\"><\/td>\n<td class=\"tableblock halign-center valign-top\">\n<p class=\"tableblock\">2005-10-14<\/p>\n<\/td>\n<td class=\"tableblock halign-center valign-top\">\n<p class=\"tableblock\">51<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Invoice: #3 Customer: Joe&#8217;s Materials<\/p>\n<\/td>\n<td class=\"tableblock halign-center valign-top\"><\/td>\n<td class=\"tableblock halign-right valign-top\"><\/td>\n<td class=\"tableblock halign-center valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-right valign-top\"><\/td>\n<td class=\"tableblock halign-center valign-top\"><\/td>\n<td class=\"tableblock halign-right valign-top\"><\/td>\n<\/tr>\n<tr>\n<td class=\"tableblock halign-center valign-top\">\n<p class=\"tableblock\">1<\/p>\n<\/td>\n<td class=\"tableblock halign-center valign-top\">\n<p class=\"tableblock\">2<\/p>\n<\/td>\n<td class=\"tableblock halign-center valign-top\">\n<p class=\"tableblock\">1<\/p>\n<\/td>\n<td class=\"tableblock halign-center valign-top\"><\/td>\n<td class=\"tableblock halign-center valign-top\"><\/td>\n<td class=\"tableblock halign-center valign-top\"><\/td>\n<td class=\"tableblock halign-center valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-center valign-top\">\n<p class=\"tableblock\">1<\/p>\n<\/td>\n<td class=\"tableblock halign-right valign-top\">\n<p class=\"tableblock\">60<\/p>\n<\/td>\n<td class=\"tableblock halign-center valign-top\">\n<p class=\"tableblock\">2005-10-14<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">COD<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Service Kits for MK I Widgets<\/p>\n<\/td>\n<td class=\"tableblock halign-right valign-top\">\n<p class=\"tableblock\">20<\/p>\n<\/td>\n<td class=\"tableblock halign-center valign-top\">\n<p class=\"tableblock\">EACH<\/p>\n<\/td>\n<td class=\"tableblock halign-right valign-top\">\n<p class=\"tableblock\">3<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td class=\"tableblock halign-center valign-top\">\n<p class=\"tableblock\">1<\/p>\n<\/td>\n<td class=\"tableblock halign-center valign-top\">\n<p class=\"tableblock\">2<\/p>\n<\/td>\n<td class=\"tableblock halign-center valign-top\">\n<p class=\"tableblock\">2<\/p>\n<\/td>\n<td class=\"tableblock halign-center valign-top\"><\/td>\n<td class=\"tableblock halign-center valign-top\"><\/td>\n<td class=\"tableblock halign-center valign-top\"><\/td>\n<td class=\"tableblock halign-center valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-center valign-top\">\n<p class=\"tableblock\">2<\/p>\n<\/td>\n<td class=\"tableblock halign-right valign-top\">\n<p class=\"tableblock\">80<\/p>\n<\/td>\n<td class=\"tableblock halign-center valign-top\">\n<p class=\"tableblock\">2005-10-14<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">COD<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Bottled Water<\/p>\n<\/td>\n<td class=\"tableblock halign-right valign-top\">\n<p class=\"tableblock\">100<\/p>\n<\/td>\n<td class=\"tableblock halign-center valign-top\">\n<p class=\"tableblock\">EACH<\/p>\n<\/td>\n<td class=\"tableblock halign-right valign-top\">\n<p class=\"tableblock\">0.8<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td class=\"tableblock halign-center valign-top\">\n<p class=\"tableblock\">1<\/p>\n<\/td>\n<td class=\"tableblock halign-center valign-top\">\n<p class=\"tableblock\">3<\/p>\n<\/td>\n<td class=\"tableblock halign-center valign-top\"><\/td>\n<td class=\"tableblock halign-center valign-top\"><\/td>\n<td class=\"tableblock halign-center valign-top\"><\/td>\n<td class=\"tableblock halign-center valign-top\">\n<p class=\"tableblock\">2005-10-14<\/p>\n<\/td>\n<td class=\"tableblock halign-center valign-top\">\n<p class=\"tableblock\">52<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Invoice: #5 Customer: Jacquiline Hau Shearer&#8217;s Snacks<\/p>\n<\/td>\n<td class=\"tableblock halign-center valign-top\"><\/td>\n<td class=\"tableblock halign-right valign-top\"><\/td>\n<td class=\"tableblock halign-center valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-right valign-top\"><\/td>\n<td class=\"tableblock halign-center valign-top\"><\/td>\n<td class=\"tableblock halign-right valign-top\"><\/td>\n<\/tr>\n<tr>\n<td class=\"tableblock halign-center valign-top\">\n<p class=\"tableblock\">1<\/p>\n<\/td>\n<td class=\"tableblock halign-center valign-top\">\n<p class=\"tableblock\">3<\/p>\n<\/td>\n<td class=\"tableblock halign-center valign-top\">\n<p class=\"tableblock\">1<\/p>\n<\/td>\n<td class=\"tableblock halign-center valign-top\"><\/td>\n<td class=\"tableblock halign-center valign-top\"><\/td>\n<td class=\"tableblock halign-center valign-top\"><\/td>\n<td class=\"tableblock halign-center valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-center valign-top\">\n<p class=\"tableblock\">1<\/p>\n<\/td>\n<td class=\"tableblock halign-right valign-top\">\n<p class=\"tableblock\">325<\/p>\n<\/td>\n<td class=\"tableblock halign-center valign-top\">\n<p class=\"tableblock\">2005-10-21<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">7 Days Date<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Bottled Water Shrink Wrap Dozens<\/p>\n<\/td>\n<td class=\"tableblock halign-right valign-top\">\n<p class=\"tableblock\">50<\/p>\n<\/td>\n<td class=\"tableblock halign-center valign-top\">\n<p class=\"tableblock\">EACH<\/p>\n<\/td>\n<td class=\"tableblock halign-right valign-top\">\n<p class=\"tableblock\">6.5<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_localised_semantics\">6. Localised Semantics<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Thanks to the connected XBRL taxonomy:<\/p>\n<\/div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p>Concept names can be resolved to user-friendly labels in the local language (e.g. Japanese, English, etc.).<\/p>\n<\/li>\n<li>\n<p>Documentation strings and business definitions can be extracted from the taxonomy&#8217;s label linkbases.<\/p>\n<\/li>\n<li>\n<p>The <code>presentation<\/code> linkbase can express the hierarchical structure defined in the dimensional hypercube. This allows structured CSV facts to be rendered in a simplified, human-friendly hierarchy, mirroring the conceptual model of the business document.<\/p>\n<\/li>\n<\/ul>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_merging_single_line_headers\">7. Merging Single-Line Headers<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>When a header contains exactly one detail, a <strong>dimensional definition linkbase<\/strong> using <code>xbrldt:targetRole<\/code> can specify that the two dimensions may be merged. This simplifies display while preserving semantic integrity \u2014 especially useful for one-line records in SME transactions.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_conclusion\">8. Conclusion<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Structured CSV, backed by xBRL-CSV and its powerful JSON metadata, provides a future-ready solution for representing semantically rich business documents in a compact, interoperable format. Combined with a well-defined taxonomy, this format ensures accurate interpretation, multilingual usability, and efficient exchange across systems and jurisdictions.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>It is a foundational building block for modern, structured data exchange in audit, e-Tax, and regulatory reporting ecosystems.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div id=\"footer\">\n<div id=\"footer-text\">\nLast updated 2025-04-13 10:06:58 +0900\n<\/div>\n<\/div>\n<div id=\"toc\" class=\"toc2\">\n<div id=\"toctitle\">Table of Contents<\/div>\n<ul class=\"sectlevel1\">\n<li><a href=\"#_based_on_xbrl_csv\">1. Based on xBRL-CSV<\/a><\/li>\n<li><a href=\"#_metadata_structure_and_semantics\">2. Metadata: Structure and Semantics<\/a><\/li>\n<li><a href=\"#_hierarchy_in_flat_rows\">3. Hierarchy in Flat Rows<\/a><\/li>\n<li><a href=\"#_graphical_illustration\">4. Graphical Illustration<\/a><\/li>\n<li><a href=\"#_example_for_a_customer_invoice\">5. Example for a Customer Invoice<\/a><\/li>\n<li><a href=\"#_localised_semantics\">6. Localised Semantics<\/a><\/li>\n<li><a href=\"#_merging_single_line_headers\">7. Merging Single-Line Headers<\/a><\/li>\n<li><a href=\"#_conclusion\">8. Conclusion<\/a><\/li>\n<\/ul>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Views: 13 Structured CSV: Expressing XML Hierarchies in a Single Sheet Nobuyuki Sambuichi 2025-04-13 Structure [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":14646,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[64,76,17],"tags":[],"_links":{"self":[{"href":"https:\/\/www.sambuichi.jp\/index.php?rest_route=\/wp\/v2\/posts\/14661"}],"collection":[{"href":"https:\/\/www.sambuichi.jp\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.sambuichi.jp\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.sambuichi.jp\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.sambuichi.jp\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=14661"}],"version-history":[{"count":15,"href":"https:\/\/www.sambuichi.jp\/index.php?rest_route=\/wp\/v2\/posts\/14661\/revisions"}],"predecessor-version":[{"id":14682,"href":"https:\/\/www.sambuichi.jp\/index.php?rest_route=\/wp\/v2\/posts\/14661\/revisions\/14682"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.sambuichi.jp\/index.php?rest_route=\/wp\/v2\/media\/14646"}],"wp:attachment":[{"href":"https:\/\/www.sambuichi.jp\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=14661"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.sambuichi.jp\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=14661"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.sambuichi.jp\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=14661"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}