2016-06-30 20 views
12

Tôi đang làm việc trên một dự án liên quan đến việc xử lý một khối lượng lớn các tài liệu XBRL (> 1m tệp riêng biệt). Tôi hoàn toàn mới với XBRL và cảm thấy khá lạc vào lúc này.Làm cách nào để nhập dữ liệu XBRL vào MySQL?

Tôi có dữ liệu liên quan đến các tài liệu XBRL đó trong cơ sở dữ liệu MySQL riêng biệt và tôi muốn thêm dữ liệu XBRL vào MySQL để lưu trữ mọi thứ trong một db.

Phương pháp tốt nhất để chuyển dữ liệu từ tài liệu XBRL sang MySQL là gì?

Có sẵn thư viện xử lý hàng loạt nào không?

Tôi đã tìm kiếm hướng dẫn về những vấn đề đó nhưng không thể tìm thấy bất kỳ điều gì cung cấp phần giới thiệu cơ bản, chỉ cần nhiều thông tin cấp cao.

+0

Tôi không nghĩ có bất kỳ, tôi đã cố gắng để làm điều tương tự về hai năm trước, ngoại trừ điểm đến là SQL Server. Bạn có loại tệp nào? –

+0

Thay vì cơ sở dữ liệu SQL đi cho cơ sở dữ liệu NoSql từ hiệu suất và khả năng mở rộng perpective –

Trả lời

7

Mô hình tự nhiên trong lý thuyết để lưu trữ XBRL trong cơ sở dữ liệu sẽ là OLAP, bởi vì XBRL là về khối dữ liệu. OLAP trên đầu trang của một cơ sở dữ liệu quan hệ sẽ được gọi là ROLAP. Đây không phải là vấn đề tầm thường, bởi vì các sự kiện được lấy từ một số lượng lớn các phân loại có thể tạo thành một khối rất lớn và thưa thớt (đối với hồ sơ SEC là kích thước 10k +), và cũng bởi vì việc tạo lược đồ SQL yêu cầu phải biết phân loại trước khi nhập. Nếu phân loại mới xuất hiện, người ta cần phải ETL lại mọi thứ. Điều này không làm cho cơ sở dữ liệu quan hệ phù hợp như một giải pháp chung.

Nếu các hồ sơ chia sẻ cùng một phân loại và phân loại rất đơn giản (như: không quá nhiều thứ nguyên), có thể đưa ra một ánh xạ đặc biệt để lưu trữ tất cả các sự kiện trong một bảng với nhiều các hàng trong ý nghĩa ROLAP (sự kiện thành các hàng, các khía cạnh cho các cột). Một số nhà cung cấp chuyên lưu trữ các sự kiện XBRL không theo chiều, trong trường hợp đó các câu lệnh SQL truyền thống (hoặc "hậu SQL" có tỷ lệ với các hàng) hoạt động tốt.

Một số nhà cung cấp tạo bảng cho mỗi siêu tăng cường XBRL trong phân loại, với lược đồ có nguồn gốc từ mạng định nghĩa nhưng khác nhau cho mỗi hypercube. Điều này có thể dẫn đến nhiều bảng trong cơ sở dữ liệu và yêu cầu nhiều kết nối cho các truy vấn liên quan đến nhiều hypercubes.

Một số nhà cung cấp khác đưa ra các giả định về cấu trúc XBRL cơ bản hoặc về loại truy vấn mà người dùng của họ cần chạy. Hạn chế phạm vi của vấn đề cho phép tìm các kiến ​​trúc cụ thể hoặc các lược đồ SQL cũng có thể thực hiện công việc cho các nhu cầu cụ thể này.

Để nhập số lượng lớn hồ sơ (ví dụ: tất cả hồ sơ SEC), chúng tôi (chủ lao động của tôi) đã xây dựng generic mapping trên các kho dữ liệu NoSQL thay vì cơ sở dữ liệu quan hệ. Số lượng lớn các sự kiện có số thứ nguyên khác nhau phù hợp với bộ sưu tập lớn các tài liệu bán cấu trúc và mạng phù hợp với định dạng phân cấp.

2

Trước tiên, bạn cần nhận ra rằng các tài liệu XBRL (trường hợp) chứa nhiều loại thông tin khác nhau. Ví dụ: nó có thể chứa thông tin định giá hàng ngày cho các quỹ đầu tư, nhưng cũng có báo cáo VAT hàng quý hoặc thông tin về tín dụng. XBRL là một cách giao tiếp tiêu chuẩn, nhưng nội dung có phân loại riêng (XBRL được chuẩn hóa) của riêng họ. Ví dụ: có Phân loại Hà Lan, trong đó cơ quan doanh thu Hà Lan được xây dựng (có phân loại riêng), trên đó có phân loại cụ thể để nộp báo cáo VAT. Những phân loại này được xác định bằng cách sử dụng XSD, Xlink và linkbase. Hãy nghĩ về nó như một khái niệm về một Dictionairy: cách mà các dictionairies được xây dựng giống nhau ở mọi nơi (sử dụng từng chữ cái trong bảng chữ cái để tạo ra 'các chương', sắp xếp các từ theo thứ tự abc, vv), nhưng một từ điển tiếng Hy lạp sử dụng bảng chữ cái riêng của nó từ ngữ và ngôn ngữ riêng của nó để giải thích nội dung.Vì vậy, nếu bạn chỉ sử dụng một hoặc một vài loại tài liệu XBRL khác nhau (chia sẻ cùng một phân loại), bạn có thể tạo ánh xạ từ các phân loại này đến các đối tượng (cơ sở dữ liệu) của riêng bạn. Nếu bạn có phạm vi phân loại rộng hơn, bạn sẽ phải tạo ra một giải pháp chung chung hơn có thể 'nhập' phân loại. Đó sẽ là một thách thức (đó là lý do không có nhiều công cụ có sẵn trên thị trường).

Nếu bạn (r company) có thể mua được, tôi khuyên bạn nên xem xét tools hiện tại như Altova's MapForce. Bằng cách đó, không cần phải học XBRL, XSD, Xlink và linkbase để bắt đầu phát triển công cụ của riêng bạn để phân tích các tệp này, bạn có thể tận dụng các sản phẩm hiện có để ánh xạ các phân loại XBRL cho cơ sở dữ liệu/ứng dụng của bạn.

+0

Bạn có biết nếu MapForce hỗ trợ iXBRL, được sử dụng bởi [Companies House (UK)] (http://download.companieshouse.gov.uk/en_accountsdata.html) ? –

+1

iXBRL là nội tuyến XBRL, cơ bản là một tệp HTML chứa dữ liệu XBRL, tạo ra một tài liệu có thể đọc được của con người về cùng một dữ liệu giống như được chứa trong XBRL 'thô'.Khi tôi nhìn vào liên kết của bạn, nó cung cấp dữ liệu ở cả hai định dạng. Thông thường, một iXBRL được tạo ra bằng cách áp dụng một mẫu (thường là một XSLT) vào tệp XBRL. Đối với câu hỏi của bạn: MapForce không có nghĩa là để làm việc với iXBRL ... Nhưng một lướt nhanh của trang web của họ cho thấy rằng Altova không có công cụ để xử lý iXBRL: StyleVision, công cụ báo cáo của họ. – DdW

+0

Cảm ơn bạn đã trả lời. Tôi đã tìm thấy chỉ khoảng 1% các tệp được cung cấp dưới dạng XBRL (.xml) và phần còn lại nằm trong iXBRL (.html) và vì vậy MapForce không thể xử lý hầu hết trong số chúng. Tôi có thể thấy nếu StyleVision có thể đọc iXBRL và đầu ra XBRL thô để MapForce có thể đọc nó mặc dù tôi đã hy vọng tôi có thể tìm thấy một công cụ để làm tất cả. –

2

Tôi hy vọng bạn biết rằng MySQL là lưu trữ dữ liệu có cấu trúc trong khi XBRL chỉ là đại diện cho bản đồ tài liệu kinh doanh thành định dạng kỹ thuật số. XBRL là tài liệu dựa trên XML, ngụ ý nó không có cấu trúc và dữ liệu bạn yêu cầu từ tài liệu có thể hoặc không thể xảy ra trong tài liệu cụ thể đó. Nó cũng có thể chứa bất kỳ thông tin bổ sung nào khác. XSD xác định cách XML có thể được cấu trúc và bao nhiêu lần bất kỳ thẻ nào có thể xảy ra. Bây giờ để trả lời câu hỏi của bạn, bạn có thể sử dụng eXistDB, mà tôi cũng đã sử dụng trước đây để lưu trữ tài liệu XBRL. Tuy nhiên, nó có thể được làm chậm ở lần. Nếu bạn chỉ yêu cầu một số dữ liệu từ XBRL và cần nó để lưu trữ trong cơ sở dữ liệu MySQL, bạn có thể sử dụng XPATH. Trong mã python đơn giản sau, bạn có thể lấy các giá trị của EquityTotalEndingBalanceReservesTotalEndingBalance từ this document.

from lxml import etree 
root = etree.fromstring(open("file.xml").read()) 
nsmap = root.nsmap 
nsmap.pop(None) # There was some error without this. 
data_one = root.xpath("//iascf-pfs:EquityTotalEndingBalance/text()",namespaces=nsmap) 
data_two = root.xpath("//novartis:ReservesTotalEndingBalance/text()",namespaces=nsmap) 
print data_one 
print data_two 

Mã này sẽ in các giá trị:

['37216000000', '36862000000', '42245000000'] 
['35903000000', '35558000000', '40971000000'] 

Vậy làm thế nào bạn có thể giải quyết vấn đề của bạn sau đó?

  1. Hoặc bạn sẽ phải chọn một NoSQL dựa lưu trữ tài liệu XML như eXistDB và viết XPath để có được những dữ liệu cụ thể.

  2. Bạn có thể phân tích thủ công tài liệu XBRL như trên và kích hoạt XPath trực tiếp và lưu trữ dữ liệu.

Sự phức tạp sẽ phát sinh nếu bạn cần tiêu thụ tất cả dữ liệu từ tất cả các loại tài liệu. Vì vậy, bạn sẽ phải hạn chế về những gì bạn sẽ được tiêu thụ từ những tài liệu.

+0

Phương pháp này có hỗ trợ 'contextRef' khác nhau không? (mà không cần phải xác định chúng theo cách thủ công) Tôi đã thấy một số sử dụng 'contextRef =" current-mud "' và một số khác sử dụng 'contextRef =" cfwd_31_12_2014 "' hoặc 'contextRef =" FY1 "' và tôi muốn lấy giá trị hiện tại/gần đây nhất. –

+0

Có thể. Bạn sẽ phải sửa đổi xpath thành thuộc tính hỗ trợ. xem xét bạn muốn giá trị từ ' 37216000000'. Trong trường hợp này, xpath sẽ là 'data_one = root.xpath (" // iascf-pfs: EquityTotalEndingBalance [@ numericContext = 'Group1999AsOf']/text() ", namespaces = nsmap)'. Điều này sẽ chỉ trả lại '' 37216000000''. Hi vọng điêu nay co ich. Vui lòng chấp nhận câu trả lời nếu điều này phù hợp với bạn. Cảm ơn, – Pant

+0

Cảm ơn bạn đã trả lời. Bạn có biết làm thế nào để làm điều này tự động? Tôi đang cố gắng xử lý ~ 6.000 tệp trong đó ngữ cảnh không được giải thích cho tôi. –

Các vấn đề liên quan